Style 1:
a(X) when X>1 ->
...omitted;
a(X) when X ->
...omitted.
Run Code Online (Sandbox Code Playgroud)
Style 2
a(X) ->
case X>1 of
true-> ...ommited;
false-> ...ommited
end.
Run Code Online (Sandbox Code Playgroud)
====Update===
As @rviding said, I update the comparison as following:
Style 1:
a(X) when X>1 ->
...omitted;
a(X) ->
...omitted.
Run Code Online (Sandbox Code Playgroud)
Style 2
a(X) ->
case X>1 of
true-> ...ommited;
false-> ...ommited
end.
Run Code Online (Sandbox Code Playgroud)
evn*_*vnu 15
了解一些Erlang关于函数语法的部分声明函数子句和case语句基本相同,除了一个区别:子句中的模式匹配可以处理多个模式,而case语句只能处理一个语句.
除此之外,我认为这是一个品味问题.当案例真的不同时,我倾向于使用不同的函数子句(如:完整函数将表现不同),当我希望代码发散并再次合并时,我使用case语句,例如计算a的值基于表达式的变量.
编辑
正如罗伯特·艾洛(RobertAloi)在下面的评论中指出的那样,使用时并没有真正受到限制case .. of.另外,正如rvirding所写,编译器在元组中包含不同的表达式时会做一些优化,以允许匹配它们.
您还应该考虑测试BIF的结果在保护中的行为与在函数内部完全不同.
我最近学到了这个,例如(length(L) > -1)在一个函数内部崩溃但在L是一个不正确的列表时没有在一个守卫中崩溃.
| 归档时间: |
|
| 查看次数: |
2927 次 |
| 最近记录: |