gpt4 book ai didi

scala - 为什么 `Source.fromFile(...).getLines()` 在我遍历之后是空的?

转载 作者:行者123 更新时间:2023-12-04 16:37:48 24 4
gpt4 key购买 nike

让我感到非常惊讶的是 (line <- lines) 是如此具有破坏性!它完全展开行迭代器。因此运行以下代码片段将使 size = 0 :

  val lines = Source.fromFile(args(0)).getLines()
var cnt = 0
for (line <- lines) {
cnt = readLines(line, cnt)
}
val size = lines.size

像这样隐藏良好的副作用是正常的 Scala 做法吗?

最佳答案

Source.getLines() 返回一个迭代器。对于每个迭代器,如果您调用批量操作,例如上面的 foreach,或 maptaketoList,等等,则迭代器不再处于可用状态。那是Iterators的契约(Contract)更一般地说,继承 TraversableOnce 的类。

It is of particular importance to note that, unless stated otherwise, one should never use an iterator after calling a method on it. The two most important exceptions are also the sole abstract methods: next and hasNext.

对于继承Traversable 的类来说情况并非如此——对于那些您可以根据需要多次调用批量遍历操作的类。

关于scala - 为什么 `Source.fromFile(...).getLines()` 在我遍历之后是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15502693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com