イテレータを拡張して新しいメソッドを作成しようとしています。このメソッドは、最後の要素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) = ?
}