Sto cercando di estendere l'iteratore per creare un nuovo metodo takeWhileInclusive
, che funzionerà come takeWhile
ma includerà l'ultimo elemento.Scala, estensione dell'iteratore
Il mio problema è la procedura migliore per estendere l'iteratore per restituire un nuovo iteratore che vorrei essere pigro valutato. Provenendo da uno sfondo C# io uso normalmente IEnumerable
e uso la parola chiave yield
, ma tale opzione non sembra esistere in Scala.
per esempio ho potuto
List(0,1,2,3,4,5,6,7).iterator.map(complex time consuming algorithm).takeWhileInclusive(_ < 6)
quindi in questo caso l'takeWhileInclusive
avrebbe solo risolvere il predicato sui valori fino a ottenere il risultato maggiore di 6, e comprenderà questo primo risultato
finora ho:
object ImplicitIterator {
implicit def extendIterator(i : Iterator[Any]) = new IteratorExtension(i)
}
class IteratorExtension[T <: Any](i : Iterator[T]) {
def takeWhileInclusive(predicate:(T) => Boolean) = ?
}
Avevate avuto uno sguardo al flusso? –
Un flusso potrebbe essere decisamente più appropriato qui nel caso di esempio, tuttavia ho ancora lo stesso problema sul modo migliore per creare il metodo di estensione –
Oh, 'takeWhileInclusive'. Il mio vecchio ['takeTo'] (https://issues.scala-lang.org/browse/SI-2963) .... –