我正在学习Erlang,我看到了一个“安全使用”的例子 这是首选“安全使用”的例子
better(N) ->
X = case N of
1 -> 1;
_ -> 0
end,
X.
也是一个安全但不好的例子
bad(N) ->
case N of
1 -> X =1;
_ -> X = 0
end,
X.
我理解这两者的功能(看起来和我一样),但我无法理解是什么让第一个功能更好,第二个功能更差?
答案 0 :(得分:8)
在第一个示例中,X
仅绑定一次。如果您希望更改case
表达式以添加新子句,X
的绑定将保持不变。但是在第二个例子中,很容易忘记在每个新的X
子句中绑定case
,因此最终会出现关于不安全变量的编译错误,更不用说你的代码比必要的更冗长了因此难以阅读。
使用case
这样的另一种替代方法是使用多个函数子句:
best(1) -> 1;
best(_N) -> 0.
这比bad
或better
函数更清晰,更容易维护。