Scala 不包含';我记不起来了

Scala 不包含';我记不起来了,scala,io,immutability,scala-collections,Scala,Io,Immutability,Scala Collections,假设我正在读取一个不适合内存的大文件。 我可以使用迭代器,但迭代器是可变的,我希望使用不可变的数据结构来建模文件Stream/LazyList是不可变的,但我不能使用它们,因为它们将所有数据缓存在内存中 对于不适合内存的大文件,是否存在任何不可变的数据结构?这取决于不可变的真正含义。因为,在最后,当程序运行时,它将发生变化,从磁盘加载更多数据。因此,在这种情况下,immutable更多地是关于它提供的抽象,因此如果您忘记了next()和friends,那么迭代器实际上是不可变的,但不可重用的,但

假设我正在读取一个不适合内存的大文件。 我可以使用
迭代器
,但迭代器是可变的,我希望使用不可变的数据结构来建模文件
Stream
/
LazyList
是不可变的,但我不能使用它们,因为它们将所有数据缓存在内存中


对于不适合内存的大文件,是否存在任何不可变的数据结构?

这取决于不可变的真正含义。因为,在最后,当程序运行时,它将发生变化,从磁盘加载更多数据。因此,在这种情况下,immutable更多地是关于它提供的抽象,因此如果您忘记了
next()
和friends,那么迭代器实际上是不可变的,但不可重用的,但是您可以从中创建一个视图,这样做会更好。不管怎样,正如我之前向您推荐的那样,请查看一下
fs2
。如何从迭代器创建视图?哦,看来您不能,我的错。所以,是的,你不能那么容易地重用迭代器,你需要调用
replicate
。在任何情况下,你都没有回答这个问题,在这种情况下,不可变是什么意思?为什么你不能使用像fs2这样的东西呢?@IvanKurchenko我已经在另一个答案中向Michael推荐过了。在本例中,我之所以提到它,是因为鉴于OP对不变性的担忧,它似乎对OP更有意义。只有在
流的头上有东西抓住了
/
懒散列表的时候,才会发生记忆(缓存)。这篇文章详细介绍了这一点。