模式匹配 Nil 和 alternative

Pattern matching Nil with alternative

我希望此代码打印 "a",但它打印 "b"。为什么?

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

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

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

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

因此,如果匹配值是 Nil 或任何值 (_),则会检查 if 1 > 1 部分,导致永远不会匹配这种情况。