首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模式匹配空ArrayBuffer

模式匹配空ArrayBuffer
EN

Stack Overflow用户
提问于 2014-06-16 15:58:27
回答 3查看 3.2K关注 0票数 5

是否有用于表示空ArrayBuffer的特殊情况类,可用于与列表的Nil类似的模式匹配?

这也是为什么这样做的原因:

代码语言:javascript
复制
scala> collection.mutable.ArrayBuffer.empty == Nil
res11: Boolean = true

虽然这并不是:

代码语言:javascript
复制
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的工作至关重要,但是数组不需要这种特殊的结构。

我为空匹配检查找到了一种解决方法,在大多数情况下可能有效:

代码语言:javascript
复制
collection.mutable.ArrayBuffer(2) match { 
  case collection.mutable.ArrayBuffer(v, _*) => v * 2
  case _ => 0 
}

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-16 17:07:30

Jasper为您的第二个问题提供了一个很好的答案(为什么==可以工作,但是模式匹配失败)。

至于您的第一个问题,ArrayBuffer不等同于ArrayBuffer。原因是List是使用scala的代数数据类型(ADT)概念定义的,而ArrayBuffer则不是。

看看source for ArrayBuffer。它是作为一个常规类实现的,而List是一个带有两个子类的抽象类:一个case object Nil和一个case class ::

这些case类允许您在List上进行模式匹配。由于没有对应的ArrayBuffer,所以不能匹配模式。

票数 5
EN

Stack Overflow用户

发布于 2014-06-16 16:55:50

代码语言:javascript
复制
scala> collection.mutable.ArrayBuffer.empty == Nil
res11: Boolean = true

通过查看equals方法的文档可以找到这一结果的原因:

如果该序列具有与此序列相同的顺序,则为true,否则为false。

例如:

代码语言:javascript
复制
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

所以这与模式匹配无关。

票数 2
EN

Stack Overflow用户

发布于 2014-06-16 17:08:52

经过一番思考,我认为没有这样的案例课。虽然Nil的存在对于List的工作至关重要,但是数组不需要这种特殊的结构。

我为空匹配检查找到了一种解决方法,在大多数情况下可能有效:

代码语言:javascript
复制
collection.mutable.ArrayBuffer(2) match { 
  case collection.mutable.ArrayBuffer(v, _*) => v * 2
  case _ => 0 
}

我首先检查数组是否至少有一个元素,否则它应该是空的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24247756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档