首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当你在Clojure REPL中输入"hello,world“时,为什么它会说”nil“?

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

Stack Overflow用户
提问于 2009-09-12 20:30:47
回答 4查看 2.5K关注 0票数 12

我在Clojure REPL中输入了以下内容(使用enclojure Netbeans插件):

代码语言:javascript
复制
user=> "hello, world"
"hello, world"
nil

nil是关于什么的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-12 21:34:36

每次函数或宏调用Clojure都会返回一个值,甚至像if语句、循环构造、toplevel函数定义或打印语句,在其他语言中也是“语句”。Lisp中没有语句/表达式二分法;一切都是表达式。

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

但是在REPL中输入文字字符串应该会返回字符串本身,就像在digitalross' post中一样。

代码语言:javascript
复制
user> (println "hello world")
hello world
nil
user> "hello world"
"hello world"
user>

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

(SLIME和其他一些REPL接口将使标准输出(上面的hello world行)与您在REPL (上面的nil)中键入的返回值不同,因为否则可能会造成混淆。)

这是您在REPL中应该看到的内容。你发布的东西一定是Enclojure的神器。

票数 22
EN

Stack Overflow用户

发布于 2009-09-12 20:46:55

无法复制..。

在Clojure 1.0.0上它不能为我做到这一点--

代码语言:javascript
复制
$ java -cp clo*.jar clojure.lang.Repl
Clojure 1.0.0-
user=> "hello, world"
"hello, world"
user=> 
票数 4
EN

Stack Overflow用户

发布于 2009-09-16 20:30:47

最近出现了一些与在windows下将CRLF行结束序列解释为两个不同表达式相关的错误。clojure中字符串的返回值应该是字符串本身。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1416067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档