clojure - 当您在 Clojure REPL 中键入 "hello, world"时,为什么会显示 'nil' ?

标签 clojure

我在 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 打印到标准输出的内容. nilprintln 的返回值.在第二种情况下,"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/

相关文章:

clojure - 从 BlockingQueue 读取时,seque 不阻塞

clojure - 在 Clojure (core.async) 中,alt 和 alt 有什么区别?

java - 使用 Maven + Java + Clojure 确保良好的安全性/代码签名

Clojure:如何从长代理语句中提取代理方法代码?

clojure - 查找向量的所有元素是否只出现一次

clojure - Map.Entry的Clojure类型提示

clojure - Clojure Pedestal 框架中的架构模型是否是类似于 Google Wave 的操作转换?

clojure - 生成 Java 类

ssh - Clojure - 如何远程连接到正在运行的 REPL 进程

clojure - 将 lein 项目与/lib 一起使用不起作用