1、match是Scala的表达式,始终以值作为结果;
2、Scala的备选项表达式永远不会“掉到”下一个case;
3、如果没有模式匹配,MatchError异常会被抛出。这意味着必须始终确信所有的情况都考虑到了,或者至少添加一个默认情况什么都不做。如 case _ =>
模式的种类
通配模式:case _ => 。表示默认的全匹配备选项。通配模式还可以用来忽略对象中不关心的部分。如:case BinOp(_,_,_) => XXX,则表示不关心二元操作符的元素是什么,只是检查是否为二元操作符
常量模式 :仅匹配自身。任何字面量都可以用作常量。包括String类型。另外,任何的val或单例对象也可以被用作常量。如,单例对象Nil是只匹配空列表的模式。
变量模式 :变量模式类似于通配符,可以匹配任何对象。不同点在于,Scala把变量绑定在匹配的对象上。之后就可以使用这个变量操作对象。
abstract class Item
case class Book(description:String,price:Double) extends Item
case class Bundle(description:String,price:Double,items:Item*) extends Item
object Pattern_Match_Case_Class_Nested{
def caseclass_nested(person:Item)=person match{
case Bundle(_,_,art @ Book(_,_),rest @ _*)=> println(art.description+" : "+art.price)
case Bundle(_,_,Book(descr,_),_*)=>println("the first description is:"+descr)
case _=> println("Oops!")
}
caseclass_nested(Bundle("111 Special",30.0,
Book("Scala for the Spark Developer",69.95),
Budle("Hadoop",40.0),
Book("Hive",79.95),
Book("HBase",32.95)
))
caseclass_nested(Bundle("1212 Special",35.0,
Book("Spark for the Impatient",39.95)
))
}