Я рассчитываю расширить итератор для создания нового метода takeWhileInclusive
, который будет работать как takeWhile
, но будет включать в себя последний элемент.
Моя проблема заключается в том, что лучше всего расширять итератор для возвратановый итератор, который я бы хотел оценить ленивым.Исходя из фона C #, я обычно использую IEnumerable
и использую ключевое слово yield
, но такой опции не существует в Scala.
например, у меня может быть
List(0,1,2,3,4,5,6,7).iterator.map(complex time consuming algorithm).takeWhileInclusive(_ < 6)
, поэтому в этом случае takeWhileInclusive
будет разрешать предикат только для значений, пока я не получу результат больше 6, и он будет включать этот первый результат
, пока у меня есть:
object ImplicitIterator {
implicit def extendIterator(i : Iterator[Any]) = new IteratorExtension(i)
}
class IteratorExtension[T <: Any](i : Iterator[T]) {
def takeWhileInclusive(predicate:(T) => Boolean) = ?
}