Mat*_*oob 5 collections scala pattern-matching hierarchical
为什么会出现以下情况:
val x: Seq[Any] = Vector.empty
x match {
 case Nil => 1
 case _ => 2
}
其中Vector.empty内部等于:
private[immutable] val NIL = new Vector[Nothing](0, 0, 0)
override def empty[A]: Vector[A] = NIL
匹配Nil并返回1?不Nil只是 的特定子类型吗Seq?
如果我使用更通用的 . 答案仍然相同Seq.empty。这是为什么?
根据规范,此模式匹配 when x == Nil,其中 forSeq 被定义为
如果该序列与此序列具有相同顺序的相同元素,则为 true,否则为 false
事实也是如此Vector.empty == Nil。
如果您确实想检查Nil模式匹配中的对象是否准确,请使用以下方法之一:
case _: Nil.type =>
case x if x eq Nil =>