gpt4 book ai didi

scala - 模式匹配空 ArrayBuffer

转载 作者:行者123 更新时间:2023-12-04 23:50:14 27 4
gpt4 key购买 nike

是否有任何特殊的案例类来表示空 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]

更新

经过一番思考后,我认为没有这样的案例类。虽然存在 NilList 至关重要要工作,数组不需要这种特殊的结构。

我找到了一种在大多数情况下可能有效的空匹配检查的解决方法:
collection.mutable.ArrayBuffer(2) match { 
case collection.mutable.ArrayBuffer(v, _*) => v * 2
case _ => 0
}

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

最佳答案

Jasper-M 为您的第二个问题提供了很好的答案(为什么 == 有效但模式匹配失败)。

至于你的第一个,没有等同于 NilArrayBuffer .原因是List使用 Scala 的代数数据类型 (ADT) 概念定义,而 ArrayBuffer不是。

看看sourceArrayBuffer .它是作为一个普通类实现的,而 List被实现为具有两个子类的抽象类:一个 case object Nil , 和 case class :: .

这些 case类允许您在 List 上进行模式匹配.由于 ArrayBuffer 没有等效项,你不能模式匹配。

关于scala - 模式匹配空 ArrayBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24247756/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com