Scala unapplySeq提取器语法

时间:2015-06-22 15:54:26

标签: scala pattern-matching scala-2.11

我(无意中)遇到了一些模式匹配语法,我没想到会编译,现在无法弄清楚。

它似乎与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中执行的示例代码

1 个答案:

答案 0 :(得分:3)

等效的非中缀版本是:

xs match {
  case List(x, _, _) => "yes"
  case _             => "no"
}

Scala specification说:

  

中缀操作模式p; op; q是构造函数的简写   或提取器模式op(p,q)。的优先级和相关性   模式中的运算符与表达式中的运算符相同。

     

中缀操作模式p; op;(q1,...,qn)是一个简写   构造函数或提取器模式op(p,q1,...,qn)。