строка чтения не работает в clojure REPL

Всякий раз, когда я вызываю функцию clojure, которая получает ввод с консоли пользователя, используя (read-line) через SLIME или обычный REPL, функция немедленно возвращается. Я прибегнул к сотрясению своего проекта и запуску его для тестирования, но это, очевидно, не быстро и неустойчиво.

Есть ли какой-то трюк, чтобы заставить работать консоль через REPL или это невозможно? Если нет, есть ли хорошие обходные пути?


person Chris Mowforth    schedule 16.08.2011    source источник
comment
Пожалуйста, можете ли вы проверить, что *in* является правильным BufferedReader?   -  person Serabe    schedule 16.08.2011
comment
*in* имеет тип #<LineNumberingPushbackReader clojure.lang.LineNumberingPushbackReader@36673c9f>. Я прочитал в другой вопрос, который, как известно, не работает. Я обновил swank-clojure до моментального снимка 1.4.0, и теперь он просто возвращает ноль.   -  person Chris Mowforth    schedule 17.08.2011


Ответы (2)


Теперь это будет работать с swank-clojure 1.4.0-SNAPSHOT, если вы оберните вызов read-line в swank.core/with-read-line-support следующим образом.

(with-read-line-support (println "a line from Emacs:" (read-line))

https://github.com/technomancy/swank-clojure/commit/f4a1eebc4d34f2ff473c4e5350f889ec

person Tavis Rudd    schedule 09.01.2012

В настоящее время, похоже, нет никакого способа чтения консольного ввода через swank-clojure; вызов (read-line) просто возвращает nil в 1.4.0-SNAPSHOT и зависает в более ранних версиях. Установка 1.4.0 в качестве плагина leiningen на уровне пользователя кажется лучшим выбором прямо сейчас. По крайней мере, в какой-то момент REPL вернется под ваш контроль.

person Chris Mowforth    schedule 17.08.2011