模式匹配
Scala 的匹配跟 Java 的 switch case 差不多
格式
匹配变量 match { case 匹配值 => 语句块 case 匹配值 => 语句块 case 匹配值 => 语句块 [case _ 守卫条件 => 语句块] // 如果 这里满足了 就不会去执行后面的 case 了 case _ => 语句块 // 当没有匹配值时,这行输出 }
计算器
实现 加减乘除
var a = 10 var b = 20 var res = 0 var c = "*" c match { case "+" => res = a + b case "-" => res = a - b case "*" => res = a * b case "/" => res = a / b case case _ => println("error 符号错误") } println(s"c = ${c} res = ${res}") --------------------------------- c = * res = 200
模式匹配的变量
可以把
var aa = "A" aa match { case "a" => println("ok~") case myaa => println(s"ok~ ${myaa}") } -------------------------------------------- ok~ A
匹配类型
编译器会先自动检测匹配的可能性,如果不可能则会报错
val listIntStr: List[(Int, String)] = List((1, "A"), (2, "B")) val num: Int = 1 listIntStr match { case a: List[(Int,String)] =>println(a) case b: Map[String,Int] => println(b) // case c: Int => c case _ => println("啥也不是") }
匹配数组的内容
for(ints <- Array(Array(1,2),Array(1,2,3),Array(0))) { ints match { case Array(0) => 0 case Array (x, y) => "有两个元素的数组" case Array (1, _*) => "以 1 开头的数组" } }
元组的特殊匹配
val (name,age,addr): (String, Int, String) = ("BigDataBoy", 20, "中国四川") println(s"name =$name age = $age addr $addr") --------------------------------------------- name =BigDataBoy age = 20 addr 中国四川
版权声明:《 Scala 模式匹配 》为明妃原创文章,转载请注明出处!
最后编辑:2020-2-7 14:02:08
2020-02-08 17:44