Mam na myśli "Programowanie w Scala 2ed". W sekcji 24.4 zauważono, że Iterable zawiera wiele metod, których nie można efektywnie napisać bez iteratora. Tabela 24.2 zawiera te metody. Jednak nie rozumiem, dlaczego niektóre z nich nie mogą być skutecznie wdrożone w iteratorze. Na przykład rozważ zipWithIndex.Dlaczego program zipWithIndex został zaimplementowany w programie Iterable i nie można go przetransponować?
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
}
Dlaczego nie przenieść tej definicji na ruchomy? Wydaje mi się, że kod może być dokładnie taki sam i nie byłoby różnicy w wydajności.
Chciałem tylko dodać przypadek użycia dla '' przesuwny na zipWithIndex' '. Co się stanie, jeśli zastosujesz metodę wybierania losowego elementu z traversalable? Podczas iteracji po elementach potrzebny jest indeks, który pomaga z prawdopodobieństwami, mimo że indeks nie odpowiada trwałej lokalizacji ze strukturą. – schmmd