11
votes

Lorsque vous tapez "bonjour, monde" dans le clojure, reply, pourquoi dit-il 'nil'?

J'ai tapé ceci dans le clojure Repl (à l'aide du plug-in CLOJURE NETBEANS):

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


0 commentaires

4 Réponses :


0
votes

Je pense que c'est la valeur de retour de votre expression. C'est le cas dans Ruby avec la méthode des puts.


1 commentaires

L'expression est un littéral à chaîne et la valeur de retour est la chaîne.



4
votes

ne peut pas reproduire ...

Il ne le fait pas pour moi sur Clojure 1.0.0 - P>

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


0 commentaires

21
votes

Chaque fonction ou macro appelle renvoie une valeur dans le clojure, même des choses comme si instructions ou des constructions de boucle ou des définitions de fonction de toplevel ou des énoncés d'impression, qui sont des "déclarations". Il n'y a pas de dichotomie de déclaration / expression dans Lisps; tout est une expression.

donc println et amis imprimés à la sortie standard-sortie en tant qu'effet secondaire et retourner nil , comme le font la plupart des fonctions qui n'ont rien utile de revenir.

mais taper une chaîne littérale à la replication doit renvoyer la chaîne elle-même, comme dans digitalRoss '< / a> post. xxx

Dans le premier cas, le Hello World La ligne est ce qui a été imprimé à la sortie standard par println < / code>. nil est la valeur renvoyée de println . Dans le second cas, "Hello World" est la valeur renvoyée de "Hello World" puisque une chaîne est évaluée à elle-même. Rien n'est imprimé à la sortie standard dans ce cas.

(SLIME et d'autres interfaces de replement seront utiles de la sortie standard-standard (le Hello World ligne ci-dessus) différemment de la valeur renvoyée de la valeur renvoyée. de ce que vous avez saisi sur la Réponse ( nil ci-dessus), car cela pourrait être déroutant autrement.)

C'est ce que vous devriez voir sur un repl. Ce que vous avez posté doit être un artefact d'enclojure.


1 commentaires

Très utile. Merci. Je me demande s'il y a un problème avec mon installation d'enclosjure ou si vous le souhaitez, comme vous le dites, un artefact attendu d'enclojure. Je me demande également quels autres "artefacts" que je peux rencontrer si je continue à utiliser des enclosjures.



3
votes

Il existe des bugs récents liés à l'interprétation de la séquence finale de la CRLF en tant que deux expressions différentes sous Windows. La valeur de retour d'une chaîne de clojure devrait être la chaîne sa seule.


0 commentaires