Elixir 似乎是一种很棒的语言。但是声明全局常量的最佳约定是什么?
我希望模块属性可能是最合适的解决方案?
交换下面的 Horizontal_line 定义可以修复编译错误。
defmodule ElixirTesting do
horizontal_line = String.duplicate("-", 80)
# def horizontal_line, do: String.duplicate("-", 80)
def test_global_constant do
IO.puts(horizontal_line)
IO.puts("Console Report Section Title")
IO.puts(horizontal_line)
true
end
end
Run Code Online (Sandbox Code Playgroud)
当你思考 Elixir 中的“全局常数”之类的事情时,你必须换个大脑。在其他语言中,您可能会听到“一切都是对象”——在 Elixir 中,您可能会说“一切都是函数”。
实现类似“全局”的“常量”的一种简单方法是在专用模块内定义一些函数,例如
defmodule Constants do
def pi, do: 3.14
def timeout, 5_000
# ... etc...
end
Run Code Online (Sandbox Code Playgroud)
您可以通过像Constants.piorConstants.timeout这样的调用轻松引用其值,或者您可以按照其他人的建议通过元编程进一步完善访问并创建宏。
正如其他人指出的那样,当仅在单个模块内需要值时,模块属性是引入共享值的有用方法。
在许多情况下,依赖应用程序配置是建立已知基线的有用方法,因此您可以依赖简单Application.get_env/3或更严格的方法Application.fetch_env!/2来检索“全局”值。
您可能还会发现定义环境变量来填充应用程序配置很有用,类似于其他语言水合值的方式,例如使用这样的包dotenvy可以让您访问环境变量。
| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |