我(无意中)遇到了一些模式匹配语法,我没想到会编译,现在无法弄清楚。
它似乎与unapplySeq
相关。
请注意这个简单示例中的case x List(_,_)
部分:
val xs = List(1, 2, 3) //> xs : List[Int] = List(1, 2, 3)
xs match {
case x List (_, _) => "yes"
case _ => "no"
} //> res0: String = yes
我习惯于:
或@
模式匹配语法,但对此感到困惑。这种语法如何工作以及它与unapplySeq
的关系是什么(如果有的话)?
在Scala 2.11.6中执行的示例代码
答案 0 :(得分:3)
等效的非中缀版本是:
xs match {
case List(x, _, _) => "yes"
case _ => "no"
}
中缀操作模式p; op; q是构造函数的简写 或提取器模式op(p,q)。的优先级和相关性 模式中的运算符与表达式中的运算符相同。
中缀操作模式p; op;(q1,...,qn)是一个简写 构造函数或提取器模式op(p,q1,...,qn)。