我正在学习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)
我理解这两个的功能(看起来和我一样),但我无法理解是什么让第一个功能变得更好,第二个功能更糟糕?
在第一个示例中,X仅绑定一次.如果您希望更改case表达式以添加新子句,则绑定X将保持不变.但是在第二个例子中,很容易忘记X在每个新case子句中绑定,因此最终会出现关于不安全变量的编译错误,更不用说你的代码比必要的更冗长,因此更难阅读.
使用case这样的另一种方法是使用多个函数子句:
best(1) -> 1;
best(_N) -> 0.
Run Code Online (Sandbox Code Playgroud)
这比任何一个bad或better多个功能更清晰,更容易维护.