Source.getLines()
を返しIterator
、を歩くとIterator
それが変化します。これはScalaのドキュメントで非常に明確にされています
イテレータは変更可能です。イテレータに対するほとんどの操作は、その状態を変更します。コレクションの要素を反復処理するためによく使用されますが、コレクションに支えられずに使用することもできます(コンパニオンオブジェクトのコンストラクターを参照)。
特に明記されていない限り、メソッドを呼び出した後はイテレータを使用しないでください。最も重要な2つの例外は、nextとhasNextの唯一の抽象メソッドでもあります。
表記法を使用することは、イテレータfor
を呼び出すための単なる構文糖衣であり、イテレータを使用しないことを示す非常に明確なドキュメントがあります。map
flatMap
foreach
再利用:このメソッドを呼び出した後、呼び出されたイテレータを破棄し、返されたイテレータのみを使用する必要があります。古いイテレータの使用は未定義であり、変更される可能性があり、新しいイテレータも変更される可能性があります。
Scalaは一般的に「実用的な」言語を目指しています。ミューテーションと副作用は、パフォーマンスと相互運用性の理由から許可されていますが、推奨されていません。しかし、それを「よく隠された」と呼ぶのは、ちょっとしたことです。