Sono confuso sul comportamento del metodo take
nel tratto Iterator
. Sembra che non consumi oggetti. Ecco un esempio:consuma elementi da una scala 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
Apparentemente Fase 2 consuma due voci, ma al punto 3 del Iterator
è ancora al primo elemento. Osservando l'implementazione, non riesco a vedere alcun tipo di copia o buffering, solo un nuovo Iterator
che delega a quello sottostante. Come potrebbe essere possibile? Come posso davvero consumare gli articoli n?
Grazie retronym, vedo il punto. Ciò che mi ha fatto scartare "Stream" era la mancanza di qualcosa come un "puntatore corrente" (a proposito, forse a causa dell'influenza di Java, qualcosa che ci si potrebbe aspettare in una cosa chiamata così). Ora vedo che potrei ottenere un "puntatore corrente" con una sequenza di 'drop' e guardare' head'. Ci riproverò. – jglatre