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 &lt;- lines) print(line) 没有在line 中添加一行,而是一个字符。由于\n 也在那里,因此按预期进行输出。当您将 print 替换为 println 时,每个字符都有自己的行。

【讨论】:

以上是关于for循环中的Scala println的主要内容,如果未能解决你的问题,请参考以下文章

如何优化 Scala 中的 for-comprehensions 和循环?

Scala:for循环直到条件

scala for循环

2021年大数据常用语言Scala:基础语法学习 循环

Scala中的yield关键字| for / yield示例

scala快速入门之基础篇-循环语法