当你在Clojure REPL中输入“hello,world”时,为什么会说'nil'?

时间:2009-09-12 20:30:47

标签: clojure

我将其输入Clojure REPL(使用enclojure Netbeans插件):

user=> "hello, world"
"hello, world"
nil

什么是零?

4 个答案:

答案 0 :(得分:21)

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

所以println和朋友打印到标准输出作为副作用并返回nil,大多数函数没有任何有用的返回。

但是在REPL中键入文字字符串应该返回字符串本身,如digitalross' post。

user> (println "hello world")
hello world
nil
user> "hello world"
"hello world"
user>

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

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

这是您应该在REPL上看到的内容。你发布的内容必须是Enclojure的神器。

答案 1 :(得分:4)

无法重现......

在Clojure 1.0.0上我没有这样做 -

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

答案 2 :(得分:3)

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

答案 3 :(得分:0)

我认为这是你表达的回归价值。用ruby方法就是这种情况。