我對方法take
在特徵Iterator
中的行爲感到困惑。看起來它不會消耗物品。下面是一個例子:從scala中消耗項目迭代器
scala> Iterator(1,2,3)
res0: Iterator[Int] = non-empty iterator
scala> res0 take 2 toArray
res1: Array[Int] = Array(1, 2)
scala> res0.next
res2: Int = 1
顯然步驟2消耗兩個項目,但在步驟3中的Iterator
仍處於第一項。看看實現,我看不到任何複製或緩衝,只是一個新的Iterator
委託給底層。這怎麼可能?我怎樣才能真正消費n項目?
謝謝retronym,我明白了這一點。是什麼讓我放棄了'Stream'就是缺乏像「當前項目指針」這樣的東西(順便說一句,也許是由於Java的影響力,可能是所謂的東西)。現在我看到,我可以通過一系列「drop」並查看「head」來獲得「當前指針」。我會再試一次。 – jglatre