Я не понимаю, как ведет себя метод возьмите
в trait Iterator
. Кажется, что он не потребляет предметы. Вот пример:
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 итератор
по-прежнему остается первым элементом. Глядя на реализацию, я не вижу никакого копирования или буферизации, только новый Итератор
, который делегирует основному. Как такое могло быть? Как я могу реально потреблять n предметов?