我希望扩展迭代器以创建一个新的方法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) = ?
}
takeWhileInclusive
。我的老朋友takeTo
.... - Daniel C. Sobral