So che per essere Traversable
, è necessario solo un metodo foreach
. Iterable
richiede un metodo iterator
.Nelle raccolte di Scala 2.8, perché il tipo Traversable è stato aggiunto sopra Iterable?
Sia il SID delle raccolte di Scala 2.8 che il documento "Fighting Bitrot with Types" sono sostanzialmente in silenzio sul motivo del perché è stato aggiunto Traversable
. Il SID dice solo "David McIver ... ha proposto Traversable come generalizzazione di Iterable".
Ho vagamente raccolto dalle discussioni su IRC che ha a che fare con il recupero delle risorse quando l'attraversamento di una raccolta termina?
Quanto segue è probabilmente correlato alla mia domanda. Ci sono alcune definizioni di funzioni dispari cercando in TraversableLike.scala
, ad esempio:
def isEmpty: Boolean = {
var result = true
breakable {
for (x <- this) {
result = false
break
}
}
result
}
Presumo ci sia una buona ragione che non è stato appena scritto come:
def isEmpty: Boolean = {
for (x <- this)
return false
true
}
'Traversable' è motivato in Ch. 24 di Programmazione in Scala, 2a ed .; in alcuni casi è più facile implementare in modo efficiente 'foreach' di' iterator'. – Blaisorblade
Per quanto riguarda l'ultima domanda: https://github.com/scala/scala/pull/5101 – floating