1

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

1 回答 1

2

^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)

于 2015-01-26T21:24:06.897 回答