Estoy buscando ampliar el iterador para crear un nuevo método takeWhileInclusive
, que operará como takeWhile
pero incluye el último elemento.Scala, extendiendo el iterador
Mi problema es cuál es la mejor práctica para extender el iterador para devolver un nuevo iterador que me gustaría ser evaluado perezosamente. Viniendo de un fondo de C#, uso normal IEnumerable
y uso la palabra clave yield
, pero esta opción no parece existir en Scala.
por ejemplo, podría tener
List(0,1,2,3,4,5,6,7).iterator.map(complex time consuming algorithm).takeWhileInclusive(_ < 6)
por lo que en este caso el takeWhileInclusive
sólo tendría que resolver el predicado en los valores hasta que consiga el resultado superior a 6, e incluirá este primer resultado
hasta ahora tengo:
object ImplicitIterator {
implicit def extendIterator(i : Iterator[Any]) = new IteratorExtension(i)
}
class IteratorExtension[T <: Any](i : Iterator[T]) {
def takeWhileInclusive(predicate:(T) => Boolean) = ?
}
tenía usted tenía un vistazo al corriente? –
Una secuencia definitivamente podría ser más apropiada aquí en el caso de ejemplo, sin embargo, todavía tengo el mismo problema con respecto a la mejor manera de compilar el método de extensión –
Oh, 'takeWhileInclusive'. Mi viejo ['takeTo'] (https://issues.scala-lang.org/browse/SI-2963) .... –