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 } 我首先检查数组是否至少有一个元素,否则它应该为空. 解决方法
Jasper-M为你的第二个问题提供了一个很好的答案(为什么==工作但模式匹配失败).
至于你的第一个,没有相当于Array的Biler的Nil.原因是List是使用scala的代数数据类型(ADT)概念定义的,而ArrayBuffer则不是. 看一下source for ArrayBuffer.它实现为常规类,而List实现为具有两个子类的抽象类:案例对象Nil和案例类::. 这些案例类允许您在List上进行模式匹配.由于ArrayBuffer没有等价物,因此无法进行模式匹配. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |