我在写一个ejabberd模块来过滤数据包。我需要获取主机名来使用gen_mod:get_module_opt()
来拉一些配置。如何在Erlang中创建全局变量
我有4个重要的功能:
start(Host, _Opt)
:这是一个ejabberd函数加载我的模块。我在这里得到Host
原子filter_packet({From, To, XML})
:这是我的数据包过滤器挂钩。我无法将自定义参数传递给此函数,因为它是ejabberd中的钩子。get_translation(XmlData)
:filter_packet()
在循环fetch_translation(XmlData)
调用get_translation()
:从get_translation()
递归调用。这是我打电话给gen_mod:get_module_opt()
,因此需要Host
。
我的问题是,我怎么能采取Host
从start()
,并把它放在一个全局变量,从而使fetch_translation
可以访问它?
THX捷思。 该模块编译好,但为'ets:new(my_table,[named_table,protected,set,{keypos,1}])给出'badarg'错误,' – Adil 2010-01-06 15:56:45
如果'my_table'表存在,您将得到一个badarg 。您可能需要检查表是否已经存在,或者将它包装在try-catch块中 – Zed 2010-01-06 17:23:41
除了上面给出的内容外,我没有在任何地方创建'my_table'。 – Adil 2010-01-07 08:59:25