当您键入“时”;“你好,世界”;在Clojure REPL中,为什么会说';零';?

当您键入“时”;“你好,世界”;在Clojure REPL中,为什么会说';零';?,clojure,Clojure,我在Clojure REPL(使用enclojure Netbeans插件)中输入了以下内容: nil是关于什么的?我认为它是表达式的返回值。ruby中的puts方法就是这样。无法复制。。。 我在Clojure 1.0.0上没有做到这一点- $ java -cp clo*.jar clojure.lang.Repl Clojure 1.0.0- user=> "hello, world" "hello, world" user=> 每个函数或宏调用都会在Clojure中返回一个值

我在Clojure REPL(使用enclojure Netbeans插件)中输入了以下内容:


nil是关于什么的?

我认为它是表达式的返回值。ruby中的puts方法就是这样。

无法复制。。。 我在Clojure 1.0.0上没有做到这一点-

$ java -cp clo*.jar clojure.lang.Repl
Clojure 1.0.0-
user=> "hello, world"
"hello, world"
user=> 

每个函数或宏调用都会在Clojure中返回一个值,甚至像
if
语句、循环构造、顶级函数定义或print语句,在其他语言中都是“语句”。Lisps中没有语句/表达式二分法;一切都是一种表达

因此,
println
和friends作为副作用打印到标准输出,并返回
nil
,大多数没有任何有用返回的函数也是如此

但是在REPL中键入文本字符串应该返回字符串本身,就像在post中一样

在第一种情况下,
hello world
行是由
println
打印到标准输出的内容
nil
println
的返回值。在第二种情况下,
“hello world”
“hello world”
的返回值,因为字符串的计算结果为自身。在这种情况下,不会将任何内容打印到标准输出

(SLIME和其他一些REPL接口将有助于将标准输出(上面的
hello world
行)的颜色设置为不同于您在REPL中键入的返回值(
nil
),因为否则可能会混淆。)


这是你应该在REPL上看到的。您发布的内容一定是Enclojure的产物。

最近有一些错误与在windows下将CRLF行尾序列解释为两个不同的表达式有关。clojure中字符串的返回值应该是字符串本身

表达式是字符串文字,返回值是字符串。非常有用。非常感谢。我想知道我的enclojure安装是否有问题,或者正如您所说,这是否是enclojure的预期产物。我还想知道,如果我继续使用enclojure,可能会遇到什么其他“工件”。
$ java -cp clo*.jar clojure.lang.Repl
Clojure 1.0.0-
user=> "hello, world"
"hello, world"
user=> 
user> (println "hello world")
hello world
nil
user> "hello world"
"hello world"
user>