我希望这段代码可以打印" 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")
}
答案 0 :(得分:7)
|
是值匹配表达式的一部分,而if
是一个完全独立的东西。我怀疑你将该行解释为case (Nil) | (_ if 1 > 1)
,但实际上更像case (Nil | _) if 1 > 1
。
因此,如果匹配的值为if 1 > 1
或任何内容(Nil
),则会检查_
部分,从而导致该情况永远不会匹配。