В Scala я могу вызвать Source.reset () для ресурсов, прочитанных из classpath? - PullRequest
2 голосов
/ 12 июля 2010

Предположим, у меня есть jarfile на моем пути к классам. В этом jarfile у меня есть файл afile.txt.

Мне нужно повторить этот файл дважды, один раз для подсчета строк и один раз для его анализа. Вот что я сделал:

val source = Source.fromInputStream(/*some magic to get the resource's InputStream*/)
source.getLines.foreach (/*count the lines*/)
source.getLines.reset.foreach (/*do something interesting*/)

Но это не работает. В отладчике похоже, что вызов reset() возвращает пустой итератор. Приведенный выше код отлично работает, когда источник ссылается на файл в файловой системе, а не на путь к классам.

Я что-то не так делаю, или это ошибка в io-библиотеке Scala?

1 Ответ

1 голос
/ 12 июля 2010

Я думаю, что это ошибка библиотеки Scala.Я быстро взглянул на Source.scala в 2.8 trunk , и reset, кажется, возвращает новую оболочку вокруг исходного входного потока, в которой после первого прохода не осталось бы содержимогоЯ думаю, что это должно бросить исключение.Я не могу придумать простой способ, которым вы могли бы сбросить произвольный поток ввода.

Я думаю, что вы можете просто позвонить val source2 = Source.fromInputStream и прочитать снова, как кажется, reset не делает больше этого.

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