首页 > Erlang并发教程 > 8.9 Erlang并发编程-调用未定义函数
2013
11-15

8.9 Erlang并发编程-调用未定义函数

BACK TOP文章索引

  1. 调用未定义函数
  2. 共1条评论

调用未定义函数

如果进程尝试调用Mod:Func(Arg0,…,ArgN),而该函数未被定义,则该调用被转换为:

error_handler:undefined_function(Mod, Func, [Arg0,...,ArgN])
假设模块error_handler已经被加载(标准发行版中预定义了error_handler模块)。error_handler模块可以被定义为程序7.4。

程序 7.4

-module(error_handler).
-export([undefined_function/3]).

undefined_function(Module, Func, Args) ->
    case code:is_loaded(Module) of
        {file,File} ->
           % the module is loaded but not the function
           io:format("error undefined function:~w ~w ~w",
                 [Module, Func, Args]),
           exit({undefined_function,{Module,Func,Args}});
        false ->
           case code:load_file(Module) of
                 {module, _} ->
                     apply(Module, Func, Args);
                 {error, _} ->
                     io:format("error undefined module:~w",
                     [Module]),
                     exit({undefined_module, Module})
           end
     end.

如果模块Mod已经被加载,那么将导致一个运行时错误。如果模块尚未加载,那么首先尝试加载该模块,若加载成功,再尝试执行先前调用的函数。

模块code了解哪些模块已被加载,同时也负责代码加载。


8.9 Erlang并发编程-调用未定义函数》有 1 条评论

留下一个回复

你的email不会被公开。