Wenn Sie auf „Hallo Welt“ in Clojure REPL geben, warum sagt es ‚keine‘?
-
06-07-2019 - |
Frage
Ich tippte diese in Clojure REPL (mit der enclojure Netbeans-Plugin):
user=> "hello, world"
"hello, world"
nil
Was ist die Null über?
Lösung
Jede Funktion oder Makroaufruf gibt einen Wert in Clojure, auch Dinge wie if
Aussagen oder Schleifenkonstrukte oder Toplevel Funktionsdefinitionen oder print-Anweisungen, die in anderen Sprachen sind „Aussagen“. Es gibt keine Erklärung / Ausdruck Dichotomie in Lisps; alles ist ein Ausdruck.
So println
und Freunde zu Standard-Ausgabe als Nebeneffekt und nil
zurückkehren, da die meisten Funktionen zu tun, die haben nichts nützlich zurückzukehren.
Aber die Eingabe einer Zeichenkette in der REPL sollte die Zeichenfolge selbst zurückkehren, wie in digitalross' Post.
user> (println "hello world")
hello world
nil
user> "hello world"
"hello world"
user>
Im ersten Fall ist die hello world
Linie, was durch println
auf Standard-Ausgabe gedruckt wurde. nil
ist der zurückgegebene Wert von println
. Im zweiten Fall ist der zurückgegebene Wert "hello world"
von "hello world"
da eine Zeichenkette selbst auswertet. Nichts wird gedruckt auf Standard-Ausgabe in diesem Fall.
(SLIME und einige andere REPL Schnittstellen werden helfend Farbstandard-Ausgang (der hello world
Linie oben) anders aus dem zurückgegebenen Wert dessen, was Sie auf dem REPL (nil
oben) eingegeben haben, da es sonst verwirrend sein könnte.)
Dies ist, was Sie bei einem REPL sehen sollen. Was Sie auf dem Laufenden ist ein Artefakt der Enclojure sein.
Andere Tipps
reproduzieren kann nicht ...
Es macht das nicht für mich auf Clojure 1.0.0 -
$ java -cp clo*.jar clojure.lang.Repl
Clojure 1.0.0-
user=> "hello, world"
"hello, world"
user=>
Es gibt einige neue Bugs im Zusammenhang mit dem CRLF Zeilenende-Sequenz als zwei verschiedene Ausdrücke unter Windows zu interpretieren. Der Rückgabewert einer Zeichenfolge in clojure sollte die Zeichenfolge seiner selbst sein.
Ich denke, es ist der Rückgabewert des Ausdrucks ist. Es ist der Fall in Ruby mit Puts Verfahren.