Скала из "Файла" странность? - PullRequest
11 голосов
/ 11 августа 2011

Я не могу понять, почему два бита кода, предназначенные для одного и того же, делают разные вещи в Scala.

Первый пример:

scala> val ggg = Source.fromFile("/somefile");
ggg: scala.io.BufferedSource = non-empty iterator

scala> ggg.getLines();
res67: Iterator[String] = empty iterator

Второй пример:

scala> Source.fromFile("/somefile").getLines();
res68: Iterator[String] = non-empty iterator

Разве они не хотели делать то же самое, или я что-то упустил?

Ответы [ 2 ]

6 голосов
/ 11 августа 2011

Это похоже на причуду (ошибку?) С BufferedSource.toString. Обратите внимание:

// no problem
scala> { val x = Source.fromFile("foo.txt"); x.getLines() }
res10: Iterator[String] = non-empty iterator

// ahh, calling toString somehow emptied our iterator
scala> { val x = Source.fromFile("foo.txt"); println(x.toString); x.getLines() }
non-empty iterator
res11: Iterator[String] = empty iterator

Чтобы показать значение выражения, REPL должен вызвать BufferedSource.toString, и это имеет побочный эффект очистки итератора.

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

Похоже на эту ошибку: SI-4662 .

Видимо исправлено в магистрали Changeset 25212 , но не в 2.9.1, насколько я вижу.

В заметках об ошибках упоминается, что, вероятно, это проявляется только в REPL, а не в "реальном" коде.

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