从案例警告中导出变量

时间:2016-09-27 09:54:02

标签: erlang warnings case-statement

使用erlang进行开发时,我有时会使用像这样的case语句

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

根据某些条件为变量赋值。

问题是:如果我在案例陈述之后使用它:

do_something(Variable),

我收到了编译警告:

Warning: variable 'Variable' exported from 'case'

Erlang根据某些条件为变量赋值并避免出现此类警告的最佳做法是什么?

2 个答案:

答案 0 :(得分:12)

在Erlang中执行此操作的惯用方法是为Variable指定case的返回值,因为case是一个表达式,它返回每个分支的最后一个表达式的值:

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

答案 1 :(得分:4)

默认情况下不会激活此警告。您必须使用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)

我碰巧认为设置这样的变量本身并没有什么不妥,所以我不打开这个选项。 (可以使用任何约定编写易于阅读或难以阅读的代码。)