从案例警告中导出变量

Exporting variable from case Warning

在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 中根据某些条件为变量赋值并避免此类警告的最佳做法是什么?

在 Erlang 中执行此操作的惯用方法是将 Variable 赋给 case 的 return 值,因为 case 是 returns 的表达式每个分支的最后一个表达式的值:

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)

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