2

我想编写一个 Scala 函数来懒惰地读取文件中的所有行(即返回一个Iterator[String]),这也会在之后关闭文件。我知道这个成语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