我希望扩展迭代器以创建一个新方法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) = ?
}