在使用可变 Scala TreeSet 时,我在同一组上多次调用 range/from/until 方法时遇到了一些奇怪的行为。以下代码块提炼了问题:
object MapTest extends App{
override def main(args: Array[String]) {
val mutableSet = scala.collection.mutable.TreeSet(3, 2, 5)
println(mutableSet)
println(mutableSet.from(2).from(3))
println(mutableSet.until(5).until(3))
println(mutableSet.range(2, 4).range(2, 4))
println(mutableSet.from(2).until(4))
val immutableSet = scala.collection.immutable.TreeSet(3, 2, 5)
println(immutableSet)
println(immutableSet.from(2).from(3))
println(immutableSet.until(5).until(3))
println(immutableSet.range(2, 4).range(2, 4))
println(immutableSet.from(2).until(4))
}
}
产生以下输出
TreeSet(2, 3, 5)
TreeSet()
TreeSet()
TreeSet()
TreeSet()
TreeSet(2, 3, 5)
TreeSet(3, 5)
TreeSet(2)
TreeSet(2, 3)
TreeSet(2, 3)
如您所见,不可变集的行为符合预期,允许多次调用 from、until 和 range。然而,在可变映射上,任何超出第一个的调用都会导致一个空列表。 (我还验证了对可变映射的 from、to 或 range 的单次调用是否正确)。
如果重要的话,我使用的是 scala 2.10.3
最佳答案
在我的电脑上尝试代码时,我得到以下输出:
TreeSet(2, 3, 5)
TreeSet(3, 5)
TreeSet(2)
TreeSet(2, 3)
TreeSet(2, 3)
TreeSet(2, 3, 5)
TreeSet(3, 5)
TreeSet(2)
TreeSet(2, 3)
TreeSet(2, 3)
所以我猜这是一个错误。我在 2.11.6 下运行它
关于scala - 在可变 TreeSet 上调用 from/until/range 两次导致空序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34429057/