Экспорт переменной из случая Предупреждение

При разработке с помощью erlang я иногда использую операторы case, подобные этому

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 присваивать значения переменным в зависимости от некоторых условий и избегать таких предупреждений?


person Sergey Ovchinnik    schedule 27.09.2016    source источник


Ответы (2)


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

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

Это предупреждение не активировано по умолчанию. Вы должны включить его с опцией 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)

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

person legoscia    schedule 27.09.2016