即時通訊擴展迭代器來創建一個新的方法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