在Erlang示例中安全使用

时间:2016-06-14 14:55:41

标签: erlang

我正在学习Erlang,我看到了一个“安全使用”的例子 这是首选“安全使用”的例子

better(N) ->
X = case N of
  1 -> 1;
  _ -> 0
end,
X.

也是一个安全但不好的例子

bad(N) ->
  case N of
    1 -> X =1;
    _ -> X = 0
  end,
X.

我理解这两者的功能(看起来和我一样),但我无法理解是什么让第一个功能更好,第二个功能更差?

1 个答案:

答案 0 :(得分:8)

在第一个示例中,X仅绑定一次。如果您希望更改case表达式以添加新子句,X的绑定将保持不变。但是在第二个例子中,很容易忘记在每个新的X子句中绑定case,因此最终会出现关于不安全变量的编译错误,更不用说你的代码比必要的更冗长了因此难以阅读。

使用case这样的另一种替代方法是使用多个函数子句:

best(1) -> 1;
best(_N) -> 0.

这比badbetter函数更清晰,更容易维护。