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

uzo*_*uzo 11 clojure

我把它键入Clojure REPL(使用enclojure Netbeans插件):

user=> "hello, world"
"hello, world"
nil
Run Code Online (Sandbox Code Playgroud)

什么是零?

Bri*_*per 21

每个函数或宏调用都返回一个Clojure中的值,甚至是if语句或循环结构或顶级函数定义或print语句,在其他语言中是"语句".Lisps中没有语句/表达二分法; 一切都是表达.

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

但是在REPL中键入文字字符串应该返回字符串本身,就像在digitalross的帖子中一样.

user> (println "hello world")
hello world
nil
user> "hello world"
"hello world"
user>
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,该hello world行是打印到标准输出的行println. nil是返回值println.在第二种情况下,"hello world""hello world"字符串求值为自身的返回值.在这种情况下,没有任何内容打印到标准输出.

(SLIME和其他一些REPL接口将有助于使标准输出(hello world上面的行)与您在REPL(nil上面)中输入的值的颜色不同,因为它可能会造成混淆.)

这是你应该在REPL上看到的.你发布的内容必须是Enclojure的工件.