本文主要是介绍erlang 中case语句的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在erlang中,至少有三种可互换的流程控制方式:函数声明上的pattern match,case语句,if语句
这里讲将case语句和函数声明上的pattern match的区别。
case语句的格式如下:
case conditional-expression ofPattern1 -> expression1, expression2, .. ;,Pattern2 -> expression1, expression2, .. ;... ;Patternn -> expression1, expression2, .. end
执行的过程是,将conditional-expression挨个和Pattern-n去做match,如果match上了,就执行相应的代码段,如果没有match,就尝试下一个Pattern,直到最后。
例如程序:
area (Shape) ->case Shape of {circle,R} -> math:pi()*R*R;{square,Side} -> Side * Side;Other -> {error,unknown_shape,Other}end.
同样的功能,用函数声明上的pattern match来实现:
area2 ({circle,R}) ->math:pi()*R*R;area2 ({square,Side}) ->Side * Side;area2 (Other) ->{error,unknown_shape,Other}.
哪一种更好呢?
没答案,如果有的话,就是看情况。
erlang中的case与函数声明上的pattern match的主要区别有:
*case用来匹配的表达式只能是一个,而函数可以若干个
*case可以用在程序中的任何地方,而函数只能在声明的地方
主要就这么两点区别,其他的几乎一样了。
另外,下面的代码好么?为什么?
convert(Day) ->case Day ofmonday -> 1;tuesday ->2;wednesday ->3;thursday ->4;friday ->5;saturday ->6;sunday ->7;Other -> {error,unknow_day}end.
这篇关于erlang 中case语句的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!