Scala 模式匹配

模式匹配

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 中国四川
发表评论 / Comment

用心评论~

金玉良言 / Appraise
明妃LV 2
2020-02-08 17:44
元宵节快乐