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.