构造器模式
构造器模式功能非常强大,比如一个构造器模式可以定义为 BinOp(?+?,e,Number(0)). 它由一个名称BinOp(某个case class的名称)和一系列有括号分开的模式构成(“+”,e和Number(0)).这个模式首先检查输入对象是否是BinOp类型的对象,然后检查构造器参数是否匹配输入的对象。
这些额外的模式表示Scala支持深度匹配,这些模式不仅仅检查最高层次的匹配,并且检查其内部内容的匹配,同时这些额外的模式自身还可以说构造器模式,因此你可以构造嵌套任意层次的构造器模式。
比如
expr match{ case BinOp("+",e,Number(0)) => println(" a deep match") case _ => }
它的第三个参数Number(0)自身也是一个构造器模式,其参数又匹配0,因此有三个层次的匹配。
序列模式
你也可以匹配如List和数组等序列类型的数据。和匹配case class语法类似,但你可以指明序列中任意数量的元素。比如:
下面的例子匹配含三个元素,其中首元素为0的列表:
scala> List(0,2,4) match{ | case List(0,_,_) => print ("found it " ) | case _ => | } found it
如果你需要匹配一个未指明长度的序列,可以使用“_*” 作为模式的后一元素,这个“_*” 可以匹配任意数目的元素(包括0个元素)
expr match{ case List(0,_*) => print ("found it") case _ => }
多元组模式
除序列外,你可以匹配多元组,比如:
scala> def tupleDemo(expr:Any) = | expr match{ | case (a,b,c) => print("matched " + a +":" +b +":"+c ) | case _ => | } tupleDemo: (expr: Any)Unit scala> tupleDemo(2,3,4) matched 2:3:4