Sto leggendo "Programmazione in Scala 2ed". Nella sezione 24.4, si fa notare che Iterable contiene molti metodi che non possono essere scritti in modo efficiente senza un iteratore. La Tabella 24.2 contiene questi metodi. Tuttavia, non capisco perché alcuni di essi non possono essere implementati in modo efficiente su iteratore. Ad esempio, considera zipWithIndex.Perché zipWithIndex è implementato in Iterable e non Traversable?
def zipWithIndex[A1 >: A, That](implicit bf: CanBuildFrom[Repr, (A1, Int), That]): That = {
val b = bf(repr)
var i = 0
for (x <- this) {
b += ((x, i))
i +=1
}
b.result
}
Perché non spostare questa definizione su attraversabile? Mi sembra che il codice potrebbe essere esattamente lo stesso e non ci sarebbe alcuna differenza in termini di efficienza.
Volevo solo aggiungere un caso d'uso per '' zipWithIndex' su Traversable '. Cosa succede se si sta implementando un metodo per scegliere un elemento casuale da un attraversabile? Durante l'iterazione degli elementi, è necessario un indice per aiutare con le probabilità, anche se l'indice non corrisponde a una posizione persistente all'interno della struttura. – schmmd