Мне нужно расширить итератор, чтобы создать новый метод takeWhileInclusive
, который будет работать как takeWhile
, но включает в себя последний элемент.
Моя проблема - это лучшая практика для расширения итератора, чтобы вернуть новый итератор, который я бы оценил лениво. Исходя из фона С#, я обычно использую 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) = ?
}