在Scala Seq
中,有lengthCompare
方法返回Seq
长度与给定Int
之间的比较而不计算{{1}的长度}。
它在特征Seq
中实现如下:
SeqLike
由于此实施仅需要/** Compares the length of this $coll to a test value.
*
* @param len the test value that gets compared with the length.
* @return A value `x` where
* {{{
* x < 0 if this.length < len
* x == 0 if this.length == len
* x > 0 if this.length > len
* }}}
* The method as implemented here does not call `length` directly; its running time
* is `O(length min len)` instead of `O(length)`. The method should be overwritten
* if computing `length` is cheap.
*/
def lengthCompare(len: Int): Int = {
if (len < 0) 1
else {
var i = 0
val it = iterator
while (it.hasNext) {
if (i == len) return if (it.hasNext) 1 else 0
it.next()
i += 1
}
i - len
}
}
,为什么不在iterator
中定义?
这会使其在IterableLike
,Seq
和Set
集合中可用。
答案 0 :(得分:1)
昨天刚发布的经过彻底修改的新Scala 2.13集合中有一个see here。原因很简单,关于Scala集合的很多事情都不是应有的方式,现在已经修复了。它存在于新版本中的事实表明,它不是先前排除它的积极选择。