gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:14:35 26 4
gpt4 key购买 nike

我似乎不完全理解 -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 中对其进行了测试。对我有什么提示,我做错了什么?

最佳答案

manual表示此代码在新生成的进程中运行,该进程在函数返回后立即终止。

一旦拥有进程终止,您创建的 ETS 表就会被删除。这是标准的 ETS 行为。这是ets man page提到它:

Note that there is no automatic garbage collection for tables. Even if there are no references to a table from any process, it will not automatically be destroyed unless the owner process terminates. It can be destroyed explicitly by using delete/1. The default owner is the process that created the table. Table ownership can be transferred at process termination by using the heir option or explicitly by calling give_away/3.

关于erlang - -on_load 在 erlang 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12799823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com