When you type “hello, world” in Clojure REPL, why does it say 'nil'?

心已入冬 提交于 2019-12-30 06:02:08

问题


I typed this into Clojure REPL (using the enclojure Netbeans plugin):

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

What's the nil about?


回答1:


Every function or macro call returns a value in Clojure, even things like if statements or looping constructs or toplevel function definitions or print statements, which in other languages are "statements". There's no statement/expression dichotomy in Lisps; everything is an expression.

So println and friends print to standard-output as a side-effect and return nil, as do most functions which don't have anything useful to return.

But typing a literal string at the REPL should return the string itself, as in digitalross' post.

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

In the first case, the hello world line is what was printed to standard-output by println. nil is the returned value of println. In the second case, "hello world" is the returned value of "hello world" since a string evaluates to itself. Nothing is printed to standard-output in this case.

(SLIME and some other REPL interfaces will helpfully color standard-output (the hello world line above) differently from the returned value of what you typed at the REPL (nil above), since it might be confusing otherwise.)

This is what you should see at a REPL. What you posted must be an artifact of Enclojure.




回答2:


Can't reproduce...

It doesn't do that for me on Clojure 1.0.0-

$ java -cp clo*.jar clojure.lang.Repl
Clojure 1.0.0-
user=> "hello, world"
"hello, world"
user=> 



回答3:


There are some recent bugs related to interpreting the CRLF end of line sequence as two different expressions under windows. The return value of a string in clojure should be the string its self.




回答4:


i think it's the return value of your expression. It's the case in ruby with puts method.



来源:https://stackoverflow.com/questions/1416067/when-you-type-hello-world-in-clojure-repl-why-does-it-say-nil

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!