2

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 の同等物があります。

4

0 に答える 0