(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()返回一个迭代器。对于每个迭代器,如果调用诸如上述foreachmaptaketoList等的批量操作,则迭代器将不再处于可用状态。
这是Iterators的契约,更广泛地说,是继承TraversableOnce的类的契约。


特别重要的是要注意,除非另有说明,否则在对它调用方法之后,切勿使用迭代器。两个最重要的例外也是唯一的抽象方法:next和hasNext。


继承Traversable的类不是这种情况-对于那些您可以多次调用批量遍历操作的类。

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

10-16 11:52