【发布时间】:2011-02-05 20:09:01
【问题描述】:
我知道要成为Traversable,你只需要一个foreach 方法。 Iterable 需要 iterator 方法。
Scala 2.8 集合 SID 和“Fighting Bitrot with Types”论文基本上都没有提到为什么要添加 Traversable。 SID 只说“David McIver...提议 Traversable 作为 Iterable 的泛化。”
我从关于 IRC 的讨论中模糊地收集到它与集合遍历终止时回收资源有关?
以下可能与我的问题有关。 TraversableLike.scala中有一些看起来很奇怪的函数定义,例如:
def isEmpty: Boolean = {
var result = true
breakable {
for (x <- this) {
result = false
break
}
}
result
}
我认为有一个很好的理由不只是写成:
def isEmpty: Boolean = {
for (x <- this)
return false
true
}
【问题讨论】:
-
Traversable在 Ch. 24 Scala 编程,第 2 版;在某些情况下,有效地实现foreach比iterator更容易。 -
关于最后一个问题:github.com/scala/scala/pull/5101
标签: scala scala-2.8 scala-collections