?在Elixir中定义宏或.hrl文件,以进行配置

Jac*_*l's 4 constants elixir

在Erlang中,我可以使用define宏或.hrl文件将配置保存在一个地方.什么是Elixir最好的地方.

我找不到任何优雅的方式.现在我做的事情是: -

def get_server_name do
    "TEST"
end
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Car*_*eto 5

无论你使用函数还是宏最终都应该过多,但是如果你正在寻找的是"将它保存在一个地方"部分,我建议将它放在它自己的命名空间/模块中

defmodule MyApp.Configuration
  def server_name do
    "foo"
  end

  # or if you prefer having it all on one line
  def host_name, do: "example.com"

  # for complete equivalency, you can use a macro
  defmacro other_config do
    "some value"
  end
end
Run Code Online (Sandbox Code Playgroud)

然后在你的应用程序中,你可以为模块添加别名,而不是包含文件,所以有一个简短的前缀来表示它的配置,并指出它们来自其他地方

defmodule MyApp.Server do
  alias MyApp.Configuration, as: C
end
Run Code Online (Sandbox Code Playgroud)

或者如果你想直接使用这些名字

defmodule MyApp.Server do
  import MyApp.Configuration
end
Run Code Online (Sandbox Code Playgroud)

  • 不通过导入共享属性.实际上,除非属性被持久化,否则一旦编译模块它们就会完全消失.你绝对可以使用宏注入属性,但这会让imo感到困惑. (2认同)