Я хочу расширить итератор, чтобы создать новый метод 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) = ?
}