是否有用于表示空ArrayBuffer的特殊情况类,可用于与列表的Nil类似的模式匹配?
这也是为什么这样做的原因:
scala> collection.mutable.ArrayBuffer.empty == Nil
res11: Boolean = true虽然这并不是:
scala> collection.mutable.ArrayBuffer() match { case Nil => 1 }
<console>:8: error: pattern type is incompatible with expected type;
found : scala.collection.immutable.Nil.type
required: scala.collection.mutable.ArrayBuffer[Nothing]更新
经过一番思考,我认为没有这样的案例课。虽然Nil的存在对于List的工作至关重要,但是数组不需要这种特殊的结构。
我为空匹配检查找到了一种解决方法,在大多数情况下可能有效:
collection.mutable.ArrayBuffer(2) match {
case collection.mutable.ArrayBuffer(v, _*) => v * 2
case _ => 0
}我首先检查数组是否至少有一个元素,否则它应该是空的。而且,事实证明,我可以只使用ArrayBuffer.isEmpty而不是模式匹配。
发布于 2014-06-16 17:07:30
发布于 2014-06-16 16:55:50
scala> collection.mutable.ArrayBuffer.empty == Nil
res11: Boolean = true通过查看equals方法的文档可以找到这一结果的原因:
如果该序列具有与此序列相同的顺序,则为true,否则为false。
例如:
scala> val buffer = collection.mutable.ArrayBuffer.empty[Int]
buffer: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
scala> buffer.append(4)
scala> buffer == List(4)
res1: Boolean = true所以这与模式匹配无关。
发布于 2014-06-16 17:08:52
经过一番思考,我认为没有这样的案例课。虽然Nil的存在对于List的工作至关重要,但是数组不需要这种特殊的结构。
我为空匹配检查找到了一种解决方法,在大多数情况下可能有效:
collection.mutable.ArrayBuffer(2) match {
case collection.mutable.ArrayBuffer(v, _*) => v * 2
case _ => 0
}我首先检查数组是否至少有一个元素,否则它应该是空的。
https://stackoverflow.com/questions/24247756
复制相似问题