我将其输入Clojure REPL(使用enclojure Netbeans插件):
user=> "hello, world"
"hello, world"
nil
什么是零?
答案 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
打印到标准输出的行。 nil
是println
的返回值。在第二种情况下,"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方法就是这种情况。