ClojureScript REPL в emacs выводит лишние символы ^ M и nils

Я новичок в ClojureScript, использую emacs, cider, cljsbuild и austin с помощью slimerjs на компьютере под управлением Windows. Я заметил, что иногда, когда я печатаю в clojurescript repl, к выходным данным добавляются дополнительный символ ^M и nil (но возвращаемое значение не равно нулю, как показано в выходных данных repl, приведенных ниже). Вывод перед ^M окрашен в красный цвет, а вывод nil - в черный. Что могло быть причиной этого и как это исправить? (Следует ли мне сообщать об этом как о проблеме одному из трекеров проекта?)

cljs.user> 1
1
cljs.user> true
true
cljs.user> (reduce + [1 2 3])
6
cljs.user> (list [1 2 3])
([1 2 3])
cljs.user> reduce
#<function (a,e,f){switch(arguments.length){case 2:return b.call(this,
a,e);case 3:return c.call(this,a,e,f)}throw Error("Invalid arity: "+arguments.length);}>^M
nil
cljs.user> js/document
#<[object HTMLDocument]>^M
nil
cljs.user> (def d js/document)
#<[object HTMLDocument]>^M
nil
cljs.user> (nil? d)
false

person Anonymous    schedule 26.01.2015    source источник


Ответы (1)


^ M - конец строки окна. Ответ на вопрос, как скрыть это в Emacs, можно найти здесь.

Печать nil в целом является нормальным поведением и не является специфическим для Clojurescript или Emacs. Все формы возвращают значение (которое может быть nil), а также могут вызывать побочные эффекты:

cljs.user> (println 1) 
1 ; Side effect - printed value
nil ; Result of evaluation

Однако возвращение nil для js/document, (def d js/document) и подобных форм "not-nil" является специфическим поведением Остина и, вероятно, может рассматриваться как незначительная ошибка.

person Jarlax    schedule 26.01.2015
comment
Спасибо! Я также добавил (add-hook 'cider-repl-mode-hook 'remove-dos-eol), чтобы активировать remove-dos-eol всякий раз, когда я был в REPL. - person Anonymous; 28.01.2015