Erlang中文手册(Erldoc.com)  »  erlang  »  load_module/2
Erlang并发编程 Erlang/OTP设计原理 Erlang/OTP[pdf] Mnesia用户手册[pdf] Erlang完整手册[en] 官网手册[en] 模块列表 方法列表 随机 Erlang中文社区(BBS) 美女图库

erlang:load_module/2

加载一个模块的目标 BEAM 代码

用法:

load_module(Module, Binary) -> {module, Module} | {error, Reason}

如果 Binary 包含着模块 Module 的目标 BEAM 代码,那么这个内置函数(BIF)会加载这些目标代码。如果模块 Module 的目标代码已经存在,那么模块所有的对外引用接口都会被替换成新加载代码里的。之前加载的代码将作为就代码保存在系统里,因为也许还有进程还用那些代码在运行着。如果加载成功,则返回 {module, Module},否则返回 {error, Reason}。

Reason 的选项:

  • badfile:Binary 是一个错误格式的目标代码
  • not_purged:模块的目标代码 Binary 不能被加载,因为该模块的旧代码已经存在
  • badfile:Binary是另外一个模块的目标代码
{ok, Module} = application:get_application(),
case code:get_object_code(Module) of
    {Module, Binary, _Filename} ->
        erlang:load_module(Module, Binary);
    GetObjectCodeError ->
        GetObjectCodeError
end.
{ok, Module} = application:get_application(),
case code:get_object_code(Module) of
    {_Module, Binary, _Filename} ->
        {ok, {_, [{abstract_code, {_, AbstractCode}}]}} = beam_lib:chunks(Binary, [abstract_code]),
        io:format("~s~n", [erl_prettypr:format(erl_syntax:form_list(AbstractCode))]);
    GetObjectCodeError ->
        GetObjectCodeError
end.
阿里云 - 最高1000元通用代金券立即可用
沪ICP备13037221号-9