Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Scala arm从Scala中的文件中读取行的简单函数_Scala_Memory_Io_Lazy Evaluation - Fatal编程技术网

使用Scala arm从Scala中的文件中读取行的简单函数

使用Scala arm从Scala中的文件中读取行的简单函数,scala,memory,io,lazy-evaluation,Scala,Memory,Io,Lazy Evaluation,我想编写一个Scala函数,以惰性地读取文件中的所有行(即返回一个迭代器[String]),之后也会关闭文件。我知道惯用语io.Source.fromFile(“something.txt”).getLines,但是正如前面提到的,这不会在以后关闭文件。当然有一个简单的方法可以做到这一点 目前,我正在使用此功能,包括: 但据我所知,这似乎把整个文件读入了内存 我来自Python的背景,这是一个可笑的琐事: def lines(filename): with open(filename) a

我想编写一个Scala函数,以惰性地读取文件中的所有行(即返回一个
迭代器[String]
),之后也会关闭文件。我知道惯用语
io.Source.fromFile(“something.txt”).getLines
,但是正如前面提到的,这不会在以后关闭文件。当然有一个简单的方法可以做到这一点

目前,我正在使用此功能,包括:

但据我所知,这似乎把整个文件读入了内存

我来自Python的背景,这是一个可笑的琐事:

def lines(filename):
   with open(filename) as f:
       for line in f:
           yield line

当然,有一个相当简单的Scala等价物,我只是还没有找到。

为什么您认为它会将整个文件读入内存
getLines
返回一个
迭代器[String]
是的,
getLines
是懒惰的,就像我想要的,但是当调用scala arm时,
scala arm
正在将所有内容读入内存——当我运行
println(lines(“BIGFILE.txt”).slice(1,10).toList)时,
我得到一个
OutOfMemoryError
,而
println(Source.fromFile(“BIGFILE.txt”).getLines.slice(1,10).toList)
运行时没有出现问题(尽管之后似乎没有关闭文件)。您解决了问题吗?
def lines(filename):
   with open(filename) as f:
       for line in f:
           yield line