Scala getLines () с выходом не так, как я ожидаю - PullRequest
4 голосов
/ 24 августа 2011

Мое понимание книги "Программирование в Scala" заключается в том, что следующее должно возвращать Array[String], когда вместо этого возвращается Iterator[String].Чего мне не хватает?

val data = for (line <- Source.fromFile("data.csv").getLines()) yield line

Я использую Scala 2.9.
Заранее спасибо.

Ответы [ 3 ]

12 голосов
/ 24 августа 2011

Глава, которую вы хотите прочитать, чтобы понять, что происходит 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].

2 голосов
/ 24 августа 2011

Нет, возвращается 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
0 голосов
/ 24 августа 2011

@ dhg правильно, и здесь немного подробнее о том, почему.

Код в вашем примере вызывает метод Source.fromFile, который возвращает BufferedSource.Затем вы вызываете getLines, который возвращает итератор.Затем этот итератор получается и сохраняется как данные.

Вызов toArray в Итераторе даст вам массив строк, которые вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...