"Scala 2ed'de Programlama" dersini okuyorum. 24.4 bölümünde, yineleyicinin, yineleyici olmadan verimli bir şekilde yazılamayan birçok yöntem içerdiği belirtilmektedir. Tablo 24.2 bu yöntemleri içerir. Ancak, bazılarının neden yineleyici üzerinde verimli bir şekilde uygulanamadığını anlamıyorum. Örneğin, zipWithIndex'i düşünün.zipWithIndex neden Yinelenebilir ve Geçilir değil?
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
}
Bu tanım neden hareket edebilir şekilde taşınmıyor? Bana öyle geliyor ki, kod tam olarak aynı olabilir ve verimli bir şekilde bir farklılık olmayacaktı.
Sadece Traversable 'üzerinde zipWithIndex'' için bir kullanım durumunda eklemek istedim '. Bir çaprazlamadan rasgele bir öğe seçmek için bir yöntem uyguluyorsanız ne olur? Elemanların üzerinde yineleme yaparken, indeks yapıya sahip kalıcı bir yere karşılık gelmese de olasılıklara yardımcı olacak bir dizine ihtiyacınız vardır. – schmmd