模式匹配Nil与替代

Ole*_*han 2 scala pattern-matching

我希望这段代码打印"a",但它打印"b".为什么?

Nil match {
  case Nil | _ if 1 > 1 => println("a")
  case x => println("b")
}
Run Code Online (Sandbox Code Playgroud)

但是此代码按预期打印"a"

Nil match {
  case Nil => println("a")
  case x => println("b")
}
Run Code Online (Sandbox Code Playgroud)

Dyl*_*lan 7

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

因此,if 1 > 1如果匹配的值是Nil或者任何(_),则检查该部件,从而导致该情况永远不匹配.