我在閱讀「Programming in Scala 2ed」。在第24.4節中,注意到Iterable包含許多方法,如果沒有迭代器就無法高效寫入。表24.2包含這些方法。但是,我不明白爲什麼其中一些不能有效地在迭代器上實現。例如,考慮zipWithIndex。爲什麼在Iterable中實現zipWithIndex而不是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
}
爲什麼不將此定義移動到可遍歷?在我看來,代碼可以完全相同,並且在效率方面沒有區別。
只是想添加一個用例'zipWithIndex'上'Traversable的'。如果你正在實現一種從遍歷中選擇隨機元素的方法呢?在迭代元素時,即使索引不符合具有結構的持久位置,也需要索引來幫助處理概率。 – schmmd