当你在 Clojure REPL 中输入“hello, world”时,为什么它显示“nil”?

2023-11-27

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

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

零是什么意思?


Clojure 中的每个函数或宏调用都会返回一个值,甚至是if语句或循环结构或顶级函数定义或打印语句,在其他语言中是“语句”。 Lisps 中不存在语句/表达式二分法;一切都是一种表达。

So println和朋友打印到标准输出作为副作用并返回nil,就像大多数没有任何有用返回值的函数一样。

但是在 REPL 中输入文字字符串应该返回字符串本身,如下所示数字罗斯' post.

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

在第一种情况下,hello worldline 是打印到标准输出的内容println. nil是返回值println。在第二种情况下,"hello world"是返回值"hello world"因为字符串的计算结果是其自身。在这种情况下,不会将任何内容打印到标准输出。

(SLIME 和其他一些 REPL 接口将有助于为标准输出着色(hello world上面的行)与您在 REPL 中键入的返回值不同(nil上面),因为否则可能会令人困惑。)

这就是您应该在 REPL 中看到的内容。您发布的内容一定是 Enclojure 的产物。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当你在 Clojure REPL 中输入“hello, world”时,为什么它显示“nil”? 的相关文章

随机推荐