怎么实现在一个 module 里的全局变量?

作者 rupert 所属板块 问答
RT
8 回复
  • tony612 发表
    如果只是 module 内部访问,并且是比较静态的话,可以用 module attribute `@foo 123` 如果是其他 module 需要访问的话,就只能通过在这个 module 定义函数了。比如 ``` defmodule Foo do def const 123 end end ```
  • jw2013 发表
    谢谢tony!非常管用
  • rupert 发表
    [@tony612](/users/89) 不是静态的,是在一个 module 里好几个方法都使用的,比如 flag, 或者数字增量
  • fanspace 发表
    如果是想搞字典类,那可以类似这样 (随便列个每页数据量) ``` defmodule YOURAPP.BusinessRela do @page_size 10 def pagesize, do: @page_size end ``` 然后在controller中 ``` alias YOURAPP.BusinessRela ps = BusinessRela.pagesize ``` 使用即可。
  • rupert 发表
    [@fanspace](/users/579) module 里的方法没法引用 `ps = BusinessRela.pagesize` 这个 `ps` 呢 ``` defmodule YOURAPP.BusinessRela do @page_size 10 def pagesize do @page_size end end defmodule YOURAPP.Ctrl do alias YOURAPP.BusinessRela ps = BusinessRela.pagesize def addone do ps = ps + 1 end end ```
  • fanspace 发表
    [@rupert](/users/494) 如果你是在module里用,当然是引用@page_size, module外才是 ps = BusinessRela.pagesize
  • dantangfan 发表
    全局变量不如就用进程字典 Process.put,Process.get ,至少这是可以修改的
  • rupert 发表
    [@fanspace](/users/579) 代码都是写在 module 里吧, @page_size 是不可变常量了,不可以改变值的