scalaで遅延イテレータを作成する方法を知っている人はいますか?
たとえば、各要素のインスタンス化を繰り返したいとします。通過後、インスタンスを停止/メモリから削除したい。
次のようにイテレータを宣言すると:
val xs = Iterator(
(0 to 10000).toArray,
(0 to 10).toArray,
(0 to 10000000000).toArray)
xs が宣言されたときに配列を作成します。これは次のように証明できます。
def f(name: String) = {
val x = (0 to 10000).toArray
println("f: " + name)
x
}
val xs = Iterator(f("1"),f("2"),f("3"))
これは次を印刷します:
scala> val xs = Iterator(f("1"),f("2"),f("3"))
f: 1
f: 2
f: 3
xs: Iterator[Array[Int]] = non-empty iterator
誰にもアイデアはありますか?
要素がメモリに残るため、ストリームは適していません。
注: 例として配列を使用していますが、任意の型で動作するようにしたいと考えています。