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

在遍历或迭代集合时,您不得修改集合。

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

于 2012-12-22T15:04:55.717 回答