私は「Programming in Scala 2ed」を読んでいます。 24.4節では、Iterableにはイテレータなしで効率的に記述できない多くのメソッドが含まれていることに注意してください。表24.2にこれらのメソッドを示します。しかし、イテレータで効率的に実装できない理由がわかりません。たとえば、zipWithIndexを考えてみましょう。zipWithIndexがIterableで実装されていて、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
}
なぜこの定義をトラバーサブルに移動しないのですか?コードはまったく同じであり、効率的には違いがないと私には思われます。このメソッドは、単に内の各要素に対してf
を呼び出す必要があるので
def foreach[U](f: Elem => U): Unit
:
ちょうど 'Traversableの上の' zipWithIndex'のためのユースケースを追加したいです'。トラバーサブルからランダム要素を選択するメソッドを実装している場合はどうなりますか?要素を反復処理するとき、索引が構造を持つ永続的な場所に対応していなくても、確率を助ける索引が必要です。 – schmmd