Je sais que pour être Traversable
, il vous suffit de disposer d'une méthode foreach
. Iterable
nécessite une méthode iterator
.Dans les collections Scala 2.8, pourquoi le type Traversable a-t-il été ajouté au-dessus d'Iterable?
Le SID des collections Scala 2.8 et le papier «Combat Bitrot avec types» sont fondamentalement muets sur la question de savoir pourquoi Traversable
a été ajouté. Le SID dit seulement "David McIver ... proposé Traversable comme une généralisation de Iterable".
Je vaguement rassemblé des discussions sur IRC qu'il doit faire avec des ressources lorsque la récupération traversal d'une collection se termine?
Ce qui suit est probablement liée à ma question. Il y a quelques définitions de fonctions impaires à la recherche dans TraversableLike.scala
, par exemple:
def isEmpty: Boolean = {
var result = true
breakable {
for (x <- this) {
result = false
break
}
}
result
}
Je suppose qu'il ya une bonne raison qui n'a pas été simplement écrit:
def isEmpty: Boolean = {
for (x <- this)
return false
true
}
'Traversable' est motivé dans Ch. 24 de la programmation à Scala, 2e éd .; dans certains cas, il est plus facile d'implémenter efficacement 'foreach' que 'itérateur'. – Blaisorblade
En ce qui concerne la dernière question: https://github.com/scala/scala/pull/5101 – floating