我对“Scala编程”一书的理解是,以下内容应返回Array[String]
,而不是返回Iterator[String]
。我错过了什么?
val data = for (line <- Source.fromFile("data.csv").getLines()) yield line
我正在使用Scala 2.9 提前谢谢。
答案 0 :(得分:12)
您希望阅读的章节了解发生了什么http://www.artima.com/pins1ed/for-expressions-revisited.html
for (x <- expr_1) yield expr_2
被翻译为
expr_1.map(x => expr_2)
因此,如果expr_1
与Iterator[String]
一样,那么expr_1.map(line => line)
也是Iterator[String]
。
答案 1 :(得分:2)
不,它会返回Iterator
。请参阅:http://www.scala-lang.org/api/current/index.html#scala.io.BufferedSource
但如果Array
是您的目标,则以下内容应该有效:
Source.fromFile("data.csv").getLines().toArray
如果您想将Iterator
转换为Array
(如评论中所述),请在投放Iterator
之后尝试以下操作:
data.toArray
答案 2 :(得分:0)
@dhg是正确的,这里有更详细的原因。
示例中的代码调用Source.fromFile,它返回一个BufferedSource。然后调用getLines返回一个迭代器。然后,该迭代器被生成并存储为数据。
在Iterator上调用toArray会为你提供一系列你想要的字符串。