用mkString访问后scala.io.Source对象为空?

时间:2015-02-17 14:07:20

标签: scala

我刚尝试了scala.io.{Source, BufferedSource}的功能。但是在运行mkString方法之后,scala.io.BufferedSource实例是一个空的迭代器。我的代码如下所示:

val myFile = Try { Source.fromFile("myFile.tmp") }

println(myFile) // prints: "Success(non-empty iterator)"

val content: Option[String] = myFile match {
  case Success(file) => Some(file.mkString)
  case Failure(exception) => None
}

println(myFile) // prints: "Success(empty iterator)"

BufferedSource实例是否受影响(清空)?在scala文档中没有提到:scala.io.BufferedSource

我是Scala-API的新手,所以也许我错过了理解的东西。

2 个答案:

答案 0 :(得分:2)

BufferedSourceIterator的子类。方法mkString迭代当前实例并对其进行字符串表示。因此,在调用mkString之后,您将收到空的迭代器。

答案 1 :(得分:2)

BufferedSource类实现TraversableOnce特征,其文档并不是最有用的:“集合的模板特征,可以只遍历一次或一次或多次。 “但是在BufferedSource的情况下,它看起来只是真正可以遍历一次。