说明:
Scala模式匹配类型包括:常量、类型判断、数组、集合列表、元组、对象(样例类)等。
匹配常量:
Scala中,模式匹配可以匹配所有的常量,包括字符串,字符,数字,布尔值等。
案例
def main(args: Array[String]): Unit = {
def describe(x: Any)= {
x match {
case 1=>"整数1"
case "wan"=>"hello wan"
case 12.5=>"double 12.5"
case _=>"不知道是啥"
}
}
println(describe(12.5))
}
匹配类型:
案例
def main(args: Array[String]): Unit = {
def describe(x: Any):String = {
x match {
case a:Int=>"Int"
case b:String=>"String"
case c:Boolean=>"Boolean"
case d:Double=>"Double"
}
}
println(describe("wanjialin"))
}
匹配数组:
案例
def main(args: Array[String]): Unit = {
def match1(arr:Array[String]):Unit={
arr match {
case Array("wan")=>println("kb15 arr")
case Array(str1,str2)=>println(str1,str2)
case Array("wan",_*)=>println("以wan开头的")
case Array(str1,str2,"wan",_*)=>{
val length = arr.length
for(i<-0 until length)
println(arr(i))
println("第三个是wan")
}
}
}
val strings = Array("wan", "jia", "lin")
match1(strings)
}
匹配集合:
案例
def main(args: Array[String]): Unit = {
val list:List[Int] = List(1,2,3,4,5)
println(list match {
case List(0) => "0"
case List(1, _*) => "以1开头的集合"
case _ => "其他的集合"
})
}
匹配元组:
案例
def main(args: Array[String]): Unit = {
val tuple2:Tuple2[Int,Int] = (1,2)
println(tuple2 match {
case (0, _) => "以0开头的元组"
case (x, y) => "" + x + "" + y
case _ => "其他的"
})
}
匹配样例类:
案例
def main(args: Array[String]): Unit = {
case class Student(name:String,age:Int)
def match1(student: Student):Unit={
student match {
case Student("wanjialin",age)=>println("hello wanjialin age is "+age)
case Student("wan",4)=>println("wan学习已经四个月了")
case Student(name,32)=>println("名字:"+name+"age is 32")
}
}
match1(new Student("wanjialin",22))
}
说明
(1)样例类仍然是类,和普通类相比,只是其自动生成了伴生对象,并且伴生对象中自动提供了一些常用的方法,如apply、unapply、toString、equals、hashCode和copy
(2)样例类是为模式匹配而优化的类,因为其默认提供了unapply方法,因此,样例类可以直接使用模式匹配,而无需自己实现unapply方法、
(3)构造器中的每一个参数都成为val,除非它被显式地声明为var