【发布时间】:2015-08-06 18:10:09
【问题描述】:
是否有可能实现以下行为,即尝试更改模块属性的值以改变模块方法的行为?
defmodule Adder do
@num_to_add 10
def addTo(input), do: input + @num_to_add
end
IO.inspect Adder.addTo(5) # Prints 15
Adder.num_to_add = 20
IO.inspect Adder.addTo(5) # Expect it to print 25
它抛出以下错误
** (CompileError) hello.exs:8: cannot invoke remote function Adder.num_to_add/0 inside match
(elixir) src/elixir_clauses.erl:26: :elixir_clauses.match/3
如果这是不可能的(因为 Elixir 中的所有内容都应该是不可变的),是否有任何 Elixir 方法可以实现类似的行为。
【问题讨论】:
-
我不确定这里的用例,但模块属性更类似于常量而不是类成员。将模块属性视为模块级常量是明智的。
-
谢谢@OnorioCatenacci - 我没有任何具体的用例,只是尝试实验
标签: elixir