我知道要使一个类成为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
在《Scala编程》第二版的第24章中得到了解释;在某些情况下,实现foreach
比实现iterator
更容易高效。 - Blaisorblade