Wenn Sie auf „Hallo Welt“ in Clojure REPL geben, warum sagt es ‚keine‘?

StackOverflow https://stackoverflow.com/questions/1416067

  •  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?

War es hilfreich?

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.

Drucken

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top