加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 模式匹配空ArrayBuffer

发布时间:2020-12-16 18:04:54 所属栏目:安全 来源:网络整理
导读:是否有任何特殊的案例类用于表示可用于模式匹配的空ArrayBuffer,类似于列表的Nil? 这也是为什么这样做: scala collection.mutable.ArrayBuffer.empty == Nilres11: Boolean = true 虽然这不是: scala collection.mutable.ArrayBuffer() match { case Nil
是否有任何特殊的案例类用于表示可用于模式匹配的空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没有等价物,因此无法进行模式匹配.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读