1.常量模式
匹配常量
object Test {
def main(args: Array[String]): Unit = {
def patternMatch(x:Any) = x match {
case 5 => println("五")
case true => println("真")
case "test" => println("字符串")
case null => println("null值")
case Nil => println("空列表")
case _ => println("其他常量")
}
patternMatch(5)
patternMatch(Nil)
}
}
2.变量模式
最为常用的一种匹配方式
object Test { def main(args: Array[String]): Unit = { def patternMatch(x: Any) = x match { case x if (x == 5) => println("五") case x if (x == "scala") => println("scala") case _ => } patternMatch(5) patternMatch("Spark") } }
3.构造器模式
package com.test case class Person(name:String,age:Int) object Test{ def main(args: Array[String]): Unit = { val p = new Person("sb",27) def patternMatch(p:Person) = p match { case Person(name,age) => println(name + ":" + age) case _ => println("Other") } patternMatch(p) } }
4.序列模式
package com.test object Test { def main(args: Array[String]): Unit = { val list = List(1,2,3,4,5) val array = Array(1,2,3) def patternMatch(p:Any) = p match { //序列模式匹配,_*表示匹配剩余内容 case Array(a,b,_*) => println(a + ":" + b) case List(_,c,_*) => println(c) case _ => println("Other") } patternMatch(array) } }
5.元组(Tuple)模式
package com.test object Test { def main(args: Array[String]): Unit = { val t = ("Spark", "Hadoop", "Scala") def patternMatch(p: Any) = p match { case (one, _, _) => println(one) //_*不适用于元组,只适合于序列 case _ => println("Other") } patternMatch(t) } }
6.类型模式
package com.test object Test { def main(args: Array[String]): Unit = { def patternMatch(p: Any) = p match { case s:String => println("String") case s:Int => println("Int") case s:Double => println("Double") case _ => println("Other Type") } patternMatch(1.3) } }
7.变量绑定模式
使用方式是在模式前面加变量和@符号
package com.test object Test { def main(args: Array[String]): Unit = { var t = List(1,List(2,3,4)) def patternMatch(p: Any) = p match { case List(_,e@List(_,_,_)) => println(e) case _ => println(Nil) } patternMatch(t) } }