即时通讯扩展迭代器来创建一个新的方法takeWhileInclusive
,它将像takeWhile
一样运行,但包括最后一个元素。斯卡拉,扩展迭代器
我的问题是什么是最好的做法来扩展迭代器返回一个新的迭代器,我想懒惰评估。从C#背景我正常使用IEnumerable
并使用yield
关键字,但这样的选项似乎不存在于斯卡拉。
例如我可能有
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) = ?
}
你不得不看看流? – 2012-02-17 14:34:32
在这个例子中,一个流肯定会更合适,但是我仍然有关于如何最好地构建扩展方法的相同问题 – 2012-02-17 14:40:00
哦,'takeWhileInclusive'。我的旧['takeTo'](https://issues.scala-lang.org/browse/SI-2963).... – 2012-02-17 15:17:20