emacs 中的 ClojureScript REPL 打印出额外的 ^Ms 和 nils

ClojureScript REPL in emacs printing out extra ^Ms and nils

我是 ClojureScript 新手,使用 emacscidercljsbuild,以及 austin 在 Windows 机器上使用 slimerjs。我注意到,有时当我输入 clojurescript repl 时,输出会附加一个额外的 ^M 字符和 nil(但 return 值不是 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

^M 是 windows 行尾。回答如何在Emacs中隐藏它可以找到here

nil 的打印通常是正常行为,并不特定于 Clojurescript 或 Emacs。所有形式 return 一个值(可能是 nil)并且还可能产生副作用:

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

然而 returning nil 用于 js/document(def d js/document) 和类似的 "not-nil" 形式是 Austin 特定的行为,可能可以被视为小错误。