案例1
class A(val age: Int, val name: String)
object People {
def unapply(pp: A): Option[(Int, String)] =
if (pp != null)
Some(pp.age, pp.name)
else None
}
object ObjMatch {
def main(args: Array[String]): Unit = {
val p = new A(10, "zhiling")
p match {
case People(age, name) => println(age, name)
case _ => println("没匹配到. ")
}
}
}
运行输出
(10,zhiling)
如果给main方法修改一下,下面这样也能匹配到
val p = new A(10, "zhiling")
p match {
case People(10, "zhiling") => println("匹配到了. ")
case _ => println("没匹配到. ")
}
案例2
object Sqrt{
def unapply(d: Double) =
if(d >= 0) Some(math.sqrt(d))
else None
}
object ObjMath1 {
def main(args: Array[String]): Unit = {
// 使用对象匹配的方式把一个数的平方根匹配出来
val d: Double = 9
d match {
case Sqrt(a) => println(a)
}
}
}
执行main方法输出:
3.0
匹配序列
object MyArray {
def unapplySeq(s: String): Option[List[String]] =
if (s != null)
Some(s.split(",").toList)
else None
}
object ObMath2 {
def main(args: Array[String]): Unit = {
val names = "lisi,zhangsan,wangwu,zhiling,fengjie"
names match {
case MyArray(a, b, rest@_*) =>
println(a) //输出: lisi
println(b) //输出: zhangsan
println(rest) //输出: List(wangwu, zhiling, fengjie)
}
}
}