Module 凤凰制作中的长生不老药模块属性

Module 凤凰制作中的长生不老药模块属性,module,elixir,phoenix-framework,Module,Elixir,Phoenix Framework,据我所知,在编译期间对模块属性进行了评估。我试着在Elixir中模仿API: defmodule Example.User do @github_api Application.get_env(:example, :github_api) def get(username) when is_binary(username) do @github_api.make_request(:get, "/users/#{username}") end end 我想知道这是否会在生

据我所知,在编译期间对模块属性进行了评估。我试着在Elixir中模仿API:

defmodule Example.User do

  @github_api Application.get_env(:example, :github_api)

  def get(username) when is_binary(username) do
    @github_api.make_request(:get, "/users/#{username}")
  end
end

我想知道这是否会在生产中起作用。据我所知,编译此模块时,无法访问应用程序。所以我的问题是:我可以使用模块属性来存储来自Application.get_env的一些配置值吗?

您绝对可以。只要应用程序是使用指定给您希望应用程序在其下运行的环境的MIX_ENV编译的,并且只要该调用的计算结果符合您对该环境的期望值,它就可以正常工作


要更深入地了解模块属性是如何受到编译的影响的,编译的情况与您所描述的几乎相同。

我相信您可以而且您应该是的,您可以而且没有任何问题。但是github_api的值必须在编译时对应用程序可用。如果您已经在env文件中指定了它,那么它应该可以正常工作。