(line
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
或map
,take
,toList
等的批量操作,则迭代器将不再处于可用状态。
这是Iterator
s的契约,更广泛地说,是继承TraversableOnce
的类的契约。
特别重要的是要注意,除非另有说明,否则在对它调用方法之后,切勿使用迭代器。两个最重要的例外也是唯一的抽象方法:next和hasNext。
继承Traversable
的类不是这种情况-对于那些您可以多次调用批量遍历操作的类。
关于scala - 为什么在迭代之后,`Source.fromFile(...)。getLines()`为空?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15502693/