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