模式匹配 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
部分,导致永远不会匹配这种情况。
我希望此代码打印 "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
部分,导致永远不会匹配这种情况。