模式匹配Nil与替代

时间:2015-04-10 20:25:43

标签: scala pattern-matching

我希望这段代码可以打印" a",但它会打印" b"。为什么?

Nil match {
  case Nil | _ if 1 > 1 => println("a")
  case x => println("b")
}

但是这段代码打印了#34; a"正如预期的那样

Nil match {
  case Nil => println("a")
  case x => println("b")
}

1 个答案:

答案 0 :(得分:7)

|是值匹配表达式的一部分,而if是一个完全独立的东西。我怀疑你将该行解释为case (Nil) | (_ if 1 > 1),但实际上更像case (Nil | _) if 1 > 1

因此,如果匹配的值为if 1 > 1或任何内容(Nil),则会检查_部分,从而导致该情况永远不会匹配。