scala 学习笔记--模式匹配
1.switch
java代码
switch (cause) { case ‘2‘ : dropTime=time; case ‘8’:case ‘9’ : case ‘10’:case ‘11’ : p_X++; break; default: break; }
scala
var tag=...
tag match {
case ‘a’ => //todo
case 'b'=> //todo2
case _ if(tag eq "c" or tag eq "d" ) => //todo3 //这是守卫
case _ => //todo3 //类似default 默认
}
1.scala 和java的一个优化的地方是不需要在每个分支break。
2.scala的守卫很方便,能少些代码
注意这种匹配一定要给变量名,不能这样用
case BigInt => //todo
注意,在所有匹配项都添加了右单引号。
这是case语句的一种特性,如果在=>左侧看到了非大写的名字,就会创建一个局部变量,用来计算该模式匹配。
如果用右单引号将名字括起来,那么就是告诉scala将该名字当做符号处理。
3.for的模式匹配
for((k,v) <- System.getProPerties()) println(k+"->" +v)
for((k,"") <- System.getProPerties())
等效于
for((k,v) <- System.getProPerties() if v =="" )//用守卫
4.正则表达式的模式匹配
5.样例类