Iterator[String]
ファイルからすべての行を遅延して読み取る (つまり、 を返す) Scala 関数を作成し、後でファイルを閉じたいと考えています。私はイディオムについて知っていますが、ここでio.Source.fromFile("something.txt").getLines
述べたように、これは後でファイルを閉じません。確かにこれを行う簡単な方法はありますか?
現在、私はscala-armライブラリでこれを使用しています:
import resource.managed
import io.{Source, BufferedSource}
def lines(filename: String): Iterator[String] = {
val reader = managed(Source.fromFile(filename, "UTF-8"))
reader.map(_.getLines).toTraversable.toIterator
}
しかし、これは私が知る限り、ファイル全体をメモリに読み込むようです。
私は Python のバックグラウンドを持っていますが、これは笑えるほど些細なことです。
def lines(filename):
with open(filename) as f:
for line in f:
yield line
確かに、私がまだ解決できていない、かなり単純な Scala の同等物があります。