Scala 专题教程-Case Class和模式匹配(5): 模式的种类(四)

jerry Scala 2015年11月25日 收藏

变量绑定
除了独立的变量模式外,你还可以把一个变量添加到另外的模式中,你简单的定义一个变量,然后再添加一个@符号,然后再写其它的模式。 这就定义了一个变量绑定过的模式。这意味着还是按照标准的模式匹配来匹配输入对象,如果匹配成功,匹配成功的对象会赋值到定义的变量中。
例如:

  1. expr match {
  2. case UnOp("abs",e @ UnOp("abs",_)) => e
  3. case _ =>
  4. }

这里定义了一绑定到变量的模式,e @ UnOp(?abs?,_),而整个模式是匹配了运用了两次“abs?操作的对象,如果匹配成功,e将赋值为匹配UnOp(?abs?,_)部分:比如:

  1. scala> val expr = UnOp("abs",UnOp("abs",Number(5)))
  2. expr: UnOp = UnOp(abs,UnOp(abs,Number(5.0)))
  3.  
  4. scala> expr match {
  5. | case UnOp("abs",e @ UnOp("abs",_)) => e
  6. | case _ =>
  7. | }
  8. res0: Any = UnOp(abs,Number(5.0))
  9.  

可以看到匹配 UnOp(?abs?,UnOp(?abs?,Number(5)))成功后,e赋值为 UnOp(abs,Number(5.0))