scala中mutable.Set.foreach的错误?

use*_*692 8 foreach scala mutable scala-collections

我正在使用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) })
Run Code Online (Sandbox Code Playgroud)

结果是这样的

0
98
2
1
4
3
8
Run Code Online (Sandbox Code Playgroud)

没有列出a的所有元素.在此之后,a变为Set(9,7)而不是空集.它对我来说看起来很奇怪,它是一个bug还是我们在做foreach时无法修改集合本身?

sep*_*p2k 10

在遍历或迭代集合时,您不能修改集合.

Scala和Java(以及大多数其他编程语言/库)中的情况相同.除了在Java中,Iterator该类提供了一种remove方法,可以使用该方法代替集合的remove方法在使用该方法进行迭代时删除元素Iterator(但会使可能正在使用的该集合的任何其他迭代器无效).Scala迭代器没有提供这样的方法.