当您键入“时”;“你好,世界”;在Clojure REPL中,为什么会说';零';?
我在Clojure REPL(使用enclojure Netbeans插件)中输入了以下内容:当您键入“时”;“你好,世界”;在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中返回一个值
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>