Экспорт переменной из регистра

При разработке с использованием erlang я иногда использую подобные выражения

case Status of
    1 ->
        Variable = "Something";
    2 ->
        Variable = "Something else";
    3 ->
        Variable = {"Something very different", [1,2,3]}
end

присвоить значение переменной в зависимости от некоторых условий.

Проблема заключается в следующем: если я использую его после оператора case:

do_something(Variable),

Я получаю предупреждение компиляции:

Warning: variable 'Variable' exported from 'case'

Какова лучшая практика в Erlang, чтобы назначать значения переменным в зависимости от некоторых условий и избегать таких предупреждений?

2 ответа

Решение

Идиоматический способ сделать это в Erlang состоит в том, чтобы назначить Variable возвращаемое значение case поскольку case это выражение, которое возвращает значение последнего выражения из каждой ветви:

Variable = case Status of
    1 -> "Something";
    2 -> "Something else";
    3 -> {"Something very different", [1,2,3]}
end

Это предупреждение не активировано по умолчанию. Вы должны включить его с warn_export_vars вариант. Например, поместив код выше в foo.erl:

$ erlc foo.erl

(нет предупреждения там)

$ erlc +warn_export_vars foo.erl
foo.erl:14: Warning: variable 'Variable' exported from 'case' (line 6)

Мне кажется, что в настройке таких переменных нет ничего плохого, поэтому я не включаю эту опцию. (Можно написать легко читаемый или трудно читаемый код, используя любое соглашение.)

Другие вопросы по тегам