关于Scala中的match case方法的使用
在scala中有一个方法 match 类似于java内的 switch,但是其功能却比 switch 强大了不止一点
switch:条件分支
match:模式匹配
在java内使用switch若是不加break将会导致穿透,但是match却不需要担心,其用法类似switch,常配合case使用
//值的匹配
val a = 3 val x = a match{ case 3 => "1" case 4 => "2" case 5 => "3" case _ => "default" } println(x) // 1 //这里值不限定于数值类型,其他类型同样适用 val b = "1" val y = b match { case "1" => "剪刀" case "2" => "石头" case "3" => "布" } println(y) // "剪刀"
//多值的匹配
List(5,10,15,20) match{ case one :: two :: three => println(one,three) // :: 为中缀表达式 case _ => println("hehe") // _通配符 在这作用相当于switch内结尾的default }
// (5,List(15,20))
//模式守卫
val a = 3 val b = a match { case a if (a>0) => "值大于0" case _ => "值小于0" } println(b) //值大于0
var a = List(1,2,3,4) var b = a.groupBy(x=>x match{ case x if (x%2==0) => "even number" case _ => "uneven number" }) println(b) //Map(even number -> List(2, 4), uneven number -> List(1, 3))
//类型转换
def a(x:Any)={ x match{ case i:Int => x.asInstanceOf[Int] + 10 case i:String => "hello" case _ => x } } print(a(20)) //30