【发布时间】:2020-04-05 02:15:15
【问题描述】:
我正在学习 Erlang/OTP,在第 14 章中它说:
"您可以使用 shell 命令将模块加载到所有节点:
command nl(Mod)"。
我想知道,如何做到这一点?我找不到 shell 命令:command nl(Mod)。
【问题讨论】:
标签: erlang erlang-shell
我正在学习 Erlang/OTP,在第 14 章中它说:
"您可以使用 shell 命令将模块加载到所有节点:
command nl(Mod)"。
我想知道,如何做到这一点?我找不到 shell 命令:command nl(Mod)。
【问题讨论】:
标签: erlang erlang-shell
您尝试在 shell 中输入help().?此函数在 stdlib 中的 c module 中定义。但是shell会理解nl(Mod).
要进行测试,请启动至少两个 erlang vm 并连接它:
erl -pa your_module_path -name first@127.0.0.1
erl -name second@127.0.0.1
在第一个 shell 中通过以下方式连接到第二个节点:
net_kernel:connect('second@127.0.0.1').
应该回复true。
在your_module_path 创建一些简单的模块,例如:
-module(nl_test).
-export([test/0]).
test() -> 1.
并通过c(nl_test). 编译它现在您可以从第一个shell 运行nl_test:test() 但第二个shell 无法加载它。要广播它并强制加载,只需从第一个 nl(nl_test). 运行现在尝试从第二个 shell nl_test:test()。
假设您将test() -> 1. 修改为test() -> 2.,您只需运行c(nl_test), nl(nl_test). 或更短的nc(nl_test),这意味着相同。
所有连接节点上的nl_test:test(). 应返回2。
这看起来很简单,但在复杂的生产系统中,正确的热加载是相当高级的问题。
【讨论】: