Erlang:读取环境变量并将它们分配给常量

时间:2016-05-20 09:38:50

标签: macros erlang environment-variables constants

我想测试一个应用程序并决定使用环境变量将配置参数传递给我的erlang应用程序。 目前我正在使用-define(PARAMETER1, os:getenv("PARAMETER1")).

将其作为宏阅读

但是,使用此实现,每次调用都会读取变量(我不确定此调用的性能)。

有没有办法在启动应用程序时只读取一次环境变量?

1 个答案:

答案 0 :(得分:2)

define是一个宏,因此每次使用宏时,宏中的内容都将放在实际代码中。您只需要在函数中调用os:getenv/1一次,将其存储在状态中并将其传递给需要该环境变量for example的主管和其他模块:

start(_StartType, _StartArgs) ->
    case get_cfg() of
        {error, _} = Err -> Err;
        Cfg -> start_sup(Cfg)
    end.

get_cfg() ->
    try
        hbd_cfg:setup()
    catch
        throw:Term -> {error, Term}
    end.

start_sup(Cfg) ->
    case hbd_sup:start_link(Cfg) of
        {ok, Pid} ->
            hbd_event_logger:add_handler(),
            {ok, Pid};
        Other ->
            {error, Other}
    end.

在此示例中,配置在get_cfg/0中读取一次,然后传递给主管,主管将其传递给受监管的工作人员。