scala – 模式匹配空ArrayBuffer

前端之家收集整理的这篇文章主要介绍了scala – 模式匹配空ArrayBuffer前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否有任何特殊的案例类用于表示可用于模式匹配的空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]

UPDATE

在考虑之后,我认为没有这样的案例类.虽然Nil的存在对于List工作至关重要,但阵列不需要这种特殊结构.

我找到了一个空匹配检查的解决方法,在大多数情况下都可以使用:

collection.mutable.ArrayBuffer(2) match { 
  case collection.mutable.ArrayBuffer(v,_*) => v * 2
  case _ => 0 
}

我首先检查数组是否至少有一个元素,否则它应该为空.
事实证明,我可以使用ArrayBuffer.isEmpty而不是模式匹配.

解决方法

Jasper-M为你的第二个问题提供了一个很好的答案(为什么==工作但模式匹配失败).

至于你的第一个,没有相当于Array的Biler的Nil.原因是List是使用scala的代数数据类型(ADT)概念定义的,而ArrayBuffer则不是.

看一下source for ArrayBuffer.它实现为常规类,而List实现为具有两个子类的抽象类:案例对象Nil和案例类::.

这些案例类允许您在List上进行模式匹配.由于ArrayBuffer没有等价物,因此无法进行模式匹配.

猜你在找的Scala相关文章