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.样例类

原文地址:https://www.cnblogs.com/yanghaolie/p/6898637.html