erlang - 如何在 Erlang 中创建全局变量

标签 erlang global-variables hook ejabberd

我正在编写一个 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/

    相关文章:

    c++ - explorer中双击文件怎么 Hook ?

    svn - 如何添加多个 SVN Hooks

    java - 让 Jetty 服务器在关闭之前执行某些操作的最佳方法是什么?

    erlang - 我可以在不停止运行应用程序的情况下重新加载单个更改的 Erlang 模块吗?

    erlang - 在一台机器上安装多个版本的 Erlang/OTP

    java - 为什么 List<List<Integer>> 会更新,即使它不是全局变量?

    android - 增加一个整数变量?

    machine-learning - 神经网络中的神经元应该异步吗?

    erlang - Elixir 有没有办法动态生成原子?

    python - 在协程中使用全局状态变量?