除了獨立的變量模式外,你還可以把一個變量添加到另外的模式中,你簡單的定義一個變量,然后再添加一個 @ 符號,然后再寫其它的模式。 這就定義了一個變量綁定過的模式。這意味著還是按照標準的模式匹配來匹配輸入對象,如果匹配成功,匹配成功的對象會賦值到定義的變量中。
例如:
expr match {
case UnOp("abs",e @ UnOp("abs",_)) => e
case _ =>
}
這里定義了一綁定到變量的模式,e @ UnOp(“abs”,_),而整個模式是匹配了運用了兩次 “abs” 操作的對象,如果匹配成功,e 將賦值為匹配 UnOp(“abs”,_) 部分:比如:
scala> val expr = UnOp("abs",UnOp("abs",Number(5)))
expr: UnOp = UnOp(abs,UnOp(abs,Number(5.0)))
scala> expr match {
| case UnOp("abs",e @ UnOp("abs",_)) => e
| case _ =>
| }
res0: Any = UnOp(abs,Number(5.0))
可以看到匹配 UnOp(“abs”,UnOp(“abs”,Number(5))) 成功后,e 賦值為 UnOp(abs,Number(5.0))。