我在 Clojure REPL 中输入了这个(使用 enclojure Netbeans 插件):
user=> "hello, world"
"hello, world"
nil
零是怎么回事?
最佳答案
在 Clojure 中,每个函数或宏调用都会返回一个值,甚至像 if
这样的值。语句或循环结构或顶级函数定义或打印语句,在其他语言中是“语句”。 Lisps 中没有语句/表达式二分法;一切都是一种表达。
所以println
和 friend 打印到标准输出作为副作用并返回 nil
,就像大多数没有任何有用返回的函数一样。
但是在 REPL 中键入文字字符串应该返回字符串本身,如 digitalross'邮政。
user> (println "hello world")
hello world
nil
user> "hello world"
"hello world"
user>
在第一种情况下,
hello world
line 是 println
打印到标准输出的内容. nil
是 println
的返回值.在第二种情况下,"hello world"
是 "hello world"
的返回值因为字符串对自身求值。在这种情况下,没有任何内容打印到标准输出。(SLIME 和其他一些 REPL 接口(interface)将有助于为标准输出(上面的
hello world
行)着色,不同于您在 REPL 中键入的返回值(上面的 nil
),否则可能会造成混淆。)这是你应该在 REPL 中看到的。您发布的内容必须是 Enclojure 的神器。
关于clojure - 当您在 Clojure REPL 中键入 "hello, world"时,为什么会显示 'nil' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416067/