Экспорт переменной из регистра
При разработке с использованием 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)
Мне кажется, что в настройке таких переменных нет ничего плохого, поэтому я не включаю эту опцию. (Можно написать легко читаемый или трудно читаемый код, используя любое соглашение.)