ビルトインメソッドを使用してリストをイテレータに変換するときに問題があります。Scala:List.iteratorが空のイテレータを生成
iterator.hasNext
を呼び出すと、iterator.size
の値が変更されます。iterator.hasNext == false
の前にも、反復が発生しています。
これらの問題の原因となる考え方について教えてください。
val list = scala.collection.immutable.List(1, 2, 3)
val iterator = list.iterator
println(iterator.size) // 3
println(iterator.hasNext) // false
println(iterator.size) // 0
Scalaバージョン2.11.4(OpenJDK 64ビットサーバーVM、Java 1.8.0_72)でローカルに確認されています。
IdeOneで確認済みhere。
Iterator docs APIから: "特に明記しない限り、イテレータを使用してイテレータを使用するべきではないことに注意することが特に重要です。"これには 'size'メソッドが含まれます。 – Brian