for循环中的Scala println
Posted
技术标签:
【中文标题】for循环中的Scala println【英文标题】:Scala println in a for loop 【发布时间】:2011-01-27 08:59:21 【问题描述】:下面的 Scala 代码正是我所期望的——它打印 some_file.txt 的每一行。
import scala.io.Source
val lines = Source.fromPath("some_file.txt").mkString
for (line <- lines) print(line)
如果我使用 println 而不是 print,我希望看到 some_file.txt 以双倍间距打印出来。相反,程序在 some_file.txt 的每个字符后打印一个换行符。有人可以向我解释一下吗?我正在使用 Scala 2.8.0 Beta 1。
【问题讨论】:
【参考方案1】:lines
是单个字符串,而不是一些可迭代的字符串容器。这是因为你在上面调用了.mkString
方法。
当您遍历一个字符串时,您一次只执行一个字符。所以for
中的line
实际上并不是一行,而是一个字符。
您可能打算调用.getLines
而不是.mkString
【讨论】:
他在fromPath
的结果上调用了.mkString
,这是一个带有一些附加内容的Iterator[Char]
。我知道你知道这一点,但我认为你可以说得更清楚。您还可以在 String
文字上放置一个 for 理解的示例。【参考方案2】:
我怀疑for (line <- lines) print(line)
没有在line
中添加一行,而是一个字符。由于\n
也在那里,因此按预期进行输出。当您将 print
替换为 println
时,每个字符都有自己的行。
【讨论】:
以上是关于for循环中的Scala println的主要内容,如果未能解决你的问题,请参考以下文章
如何优化 Scala 中的 for-comprehensions 和循环?