Scala Iterator在size未引发错误后再次调用

bq3bfh9z  于 2023-03-30  发布在  Scala
关注(0)|答案(1)|浏览(85)

使用Scala 2.13.10的本地解释器,我正在运行以下代码

scala> val it = Iterator("a", "number", "of", "words")
val it: Iterator[String] = <iterator>
scala> it.size
val res0: Int = 4
scala> it.next()
val res14: String = a

我假设运行命令it.size将遍历迭代器,并且it.next()将失败,正如Scala文档中所指出的
it.size返回的元素个数。注意:这次行动结束后,它将结束!
https://docs.scala-lang.org/overviews/collections-2.13/iterators.html
我错过了什么?

nr9pn0ug

nr9pn0ug1#

概述并没有完全描述size的行为。对于knownSize是非负的迭代器(如从有限集合创建的迭代器),size实际上并不遍历迭代器。
也就是说,sizeIterator上的方法之一,在调用它之后,唯一安全的做法是不再使用迭代器(几乎Iterator上除了hasNextnext之外的所有方法都是这样的方法)。

相关问题