Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在erlang中-on_load是如何工作的?_Erlang - Fatal编程技术网

在erlang中-on_load是如何工作的?

在erlang中-on_load是如何工作的?,erlang,Erlang,我似乎不完全理解-on_load指令是如何工作的。在我编写的模块中,我有一个函数来初始化ets表并用一些数据填充它。显式调用此函数时,此函数工作正常。不过:我认为如果加载模块时ets表会“自动”填充就好了。但这似乎不起作用,因为加载模块后,ets:info(filesig)告诉我“未定义”。相关代码如下所示: ... -on_load(init/0), init() -> % load filesig database into ETS {_, Signatures}

我似乎不完全理解-on_load指令是如何工作的。在我编写的模块中,我有一个函数来初始化ets表并用一些数据填充它。显式调用此函数时,此函数工作正常。不过:我认为如果加载模块时ets表会“自动”填充就好了。但这似乎不起作用,因为加载模块后,
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显式销毁。默认所有者是 创建表的进程。表所有权可以在以下位置转移: 通过使用继承人选项或通过调用 把你送走