在Erlang示例中安全使用

Mat*_*roh 2 erlang

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

better(N) ->
X = case N of
  1 -> 1;
  _ -> 0
end,
X.
Run Code Online (Sandbox Code Playgroud)

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

bad(N) ->
  case N of
    1 -> X =1;
    _ -> X = 0
  end,
X.
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ski 8

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

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

best(1) -> 1;
best(_N) -> 0.
Run Code Online (Sandbox Code Playgroud)

这比任何一个badbetter多个功能更清晰,更容易维护.