我有灵药该模块与属性外:接入模块属性模块
defmodule MyAwesomeModule do
@awesome_number 7
# other stuff...
end
我无法访问@awesome_number
模块外。我已经使用Module.get_attribute/2
方法试过,但它抛出这个错误:
iex(79)> Module.get_attribute(MyAwesomeModule, :awesome_number)
** (ArgumentError) could not call get_attribute on module MyAwesomeModule because it was already compiled
(elixir) lib/module.ex:1101: Module.assert_not_compiled!/2
(elixir) lib/module.ex:1016: Module.get_attribute/3
所以现在,我在包装方法的模块属性来访问它,但它并没有真正做感觉到我。我可以简单地使用该方法,并停止使用该属性一起:
defmodule MyAwesomeModule do
@awesome_number 7
def awesome_number, do: @awesome_number
# other stuff...
end
所以我的问题是,是有这样做的更好/有道?
嗯。海事组织似乎是一个非常薄弱的原因。我没有看到其他使用模块属性的其他用法(除了文档,标签等...) – Sheharyar
Elixir的Plug库是一个很好的使用“accumulate:true”模块属性的例子。如果您想在源代码中挖掘更多内容,请点击此链接https://github.com/elixir-lang/plug/blob/19f53a67e672152a7393611681431c1e0ec1be04/lib/plug/builder.ex#L121 – ventsislaf