在erlang中-on_load是如何工作的?
我似乎不完全理解-on_load指令是如何工作的。在我编写的模块中,我有一个函数来初始化ets表并用一些数据填充它。显式调用此函数时,此函数工作正常。不过:我认为如果加载模块时ets表会“自动”填充就好了。但这似乎不起作用,因为加载模块后,在erlang中-on_load是如何工作的?,erlang,Erlang,我似乎不完全理解-on_load指令是如何工作的。在我编写的模块中,我有一个函数来初始化ets表并用一些数据填充它。显式调用此函数时,此函数工作正常。不过:我认为如果加载模块时ets表会“自动”填充就好了。但这似乎不起作用,因为加载模块后,ets:info(filesig)告诉我“未定义”。相关代码如下所示: ... -on_load(init/0), init() -> % load filesig database into ETS {_, Signatures}
ets:info(filesig)
告诉我“未定义”。相关代码如下所示:
...
-on_load(init/0),
init() ->
% load filesig database into ETS
{_, Signatures} = file:consult("path to a file"),
ets:new(filesig, [set, protected, named_table]),
ets:insert(filesig, Signatures),
ok.
...
我已经在erlang shell中对其进行了测试。有什么提示吗,我做错了什么?说明此代码在新生成的进程中运行,该进程在函数返回时立即终止
一旦所属进程终止,您创建的ETS表将被删除。这是标准的ETS行为。以下是关于它的提到:
请注意,表没有自动垃圾回收。即使
任何进程都没有对表的引用,它不会
除非所有者进程终止,否则将自动销毁。它可以
可以使用delete/1显式销毁。默认所有者是
创建表的进程。表所有权可以在以下位置转移:
通过使用继承人选项或通过调用
把你送走