我知道在 Elixir 中我可以使用随机变量启动一个模块,如下所示:
defmodule MyMod do
@word = "test"
end
Run Code Online (Sandbox Code Playgroud)
但是是否可以使用类似的随机单词来启动此模块
defmodule MyMod do
@words = ["test", "hello", "bye"]
@word = @words[1]
end
Run Code Online (Sandbox Code Playgroud)
或者甚至比这更随机,并且有一个在初始化时被调用的函数,并且有一些更好的随机逻辑来确定起始词?
我想澄清之前的评论:是的,你可以使用Enum.random/1
例如
defmodule MyMod do
@words ["test", "hello", "bye"]
@word Enum.random(@words)
end
Run Code Online (Sandbox Code Playgroud)
或者您可以引用现有函数(例如提供更复杂逻辑的函数)。在这种情况下,该函数需要是动态的,也许像:
defmodule MyMod do
f = fn ->
# do something
end
@foo f.()
# ...
end
Run Code Online (Sandbox Code Playgroud)
或者被调用的函数必须隔离在不同的模块中(因为您无法调用尚未编译的函数/模块)。
在最近的一个示例中,我使用编译时函数从 CSV 文件构建模块数据。
无论哪种情况,您都应该了解此代码的计算将在编译模块时发生,而不是在代码实际运行时发生。这可能是也可能不是您正在寻找的内容:它与在面向对象范例中初始化对象或类的实例时执行的代码不同。
旁注:elixir中的模块属性分配时不带等号:
- @foo = :bar
+ @foo :bar
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
210 次 |
最近记录: |