8

このコードを試すとき、私はscala 2.9.1を使用しています:

import scala.collection.mutable
val a = mutable.Set(1,2,3,4,7,0,98,9,8)
a.foreach(x => { println(x); a.remove(x) })

結果は次のようなものでした

0
98
2
1
4
3
8

aのすべての要素をリストしていませんでした。この後、a は空集合ではなく Set(9, 7) になります。私には非常に奇妙に見えますが、これはバグですか、それとも foreach を実行するときにセット自体を変更できないのでしょうか?

4

1 に答える 1

10

トラバース中または反復中にコレクションを変更することはできません。

これは、Java (および他のほとんどのプログラミング言語/ライブラリ) と同様に Scala でも同じです。Java を除いて、Iteratorクラスはremoveコレクションのメソッドの代わりに使用できるメソッドを提供し、それremoveを使用して反復しながら要素を削除しますIterator(ただし、使用中の可能性のあるそのコレクションの他の反復子はすべて無効になります)。Scala Iterators はそのようなメソッドを提供しません。

于 2012-12-22T15:04:55.717 に答える