2

我在 scala 中发现了一个奇怪的工作结构:

(ArrayBuffer[Int]():Seq[Int]) match {
   case Nil => "whoo"
   case _ => "nayyy"
}

返回

"whoo"

显然这已经部分适用于 Vectors,但不适用于模式匹配。有人可以解释一下吗?Nil 没有任何名为 unapply 的方法。这怎么可能?

4

1 回答 1

4

对于对象,unapply不涉及(如果您使用了假设的情况,那就是这种情况case Nil() => ...)。相反,使用该equals方法检查相等性。

集合的平等是根据它们的元素来定义的。例如

List(1,2,3) == Vector(1,2,3)  // true!

同样的情况发生在Nil等于任何空序列的情况下:

Vector() == Nil  // true
collection.mutable.ArrayBuffer() == Nil  // true
于 2014-04-14T16:54:26.210 回答