Joh*_*ion 6 scala match extractor
我定义了一个自定义提取器来获取列表的最后一个元素,如/sf/answers/468842461/:
object :+ {
def unapply[A](l: List[A]): Option[(List[A], A)] = {
if (l.isEmpty)
None
else
Some(l.init, l.last)
}
}
Run Code Online (Sandbox Code Playgroud)
现在这匹配"好":
List(1, 2, 3) match {
case init :+ last => "good"
case head :: tail => "bad"
}
Run Code Online (Sandbox Code Playgroud)
但如果我添加另一个条款,它现在突然匹配"坏":
List(1, 2, 3) match {
case List(7) => "never"
case init :+ last => "good"
case head :: tail => "bad"
}
Run Code Online (Sandbox Code Playgroud)
这种行为的原因是什么?
这是#1697/2337和十几个副本.
https://issues.scala-lang.org/browse/SI-1697
可以肯定地说,它不会以直接方式修复,而是通过删除virtpatmat实现的模式匹配器.尝试最近的构建并使用-Yvirtpatmat进行编译,您将得到正确的答案.