我正在编写一个 ejabberd 模块来过滤数据包。我需要获取主机名以使用 gen_mod:get_module_opt()
提取一些配置.
我有 4 个重要功能:
start(Host, _Opt)
: 这是一个加载我的模块的 ejabberd 函数。我得到 Host
原子在这里filter_packet({From, To, XML})
: 这是我的包过滤钩子(Hook)。我不能将自定义参数传递给这个函数,因为它是 ejabberd 中的一个钩子(Hook)。 get_translation(XmlData)
: filter_packet()
来电get_translation()
在一个循环中fetch_translation(XmlData)
: 从 get_translation()
递归调用.这是我打电话的地方gen_mod:get_module_opt()
,因此需要 Host
. 我的问题是,我怎样才能服用
Host
来自 start()
并将其放入一个全局变量中,这样 fetch_translation
可以访问吗?
最佳答案
尝试使用 persistent_term :
1> persistent_term:put(hello, <<"world">>).
ok
2> persistent_term:get(hello).
<<"world">>
3> persistent_term:erase(hello).
true
4> persistent_term:get(hello).
** exception error: bad argument
in function persistent_term:get/1
called as persistent_term:get(hello)
关于erlang - 如何在 Erlang 中创建全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2013964/