Я набрал это в Clojure REPL (с помощью плагина Netbeans):
user=> "hello, world"
"hello, world"
nil
Что за ноль?
Я набрал это в Clojure REPL (с помощью плагина Netbeans):
user=> "hello, world"
"hello, world"
nil
Что за ноль?
Каждая функция или макровызов возвращает значение в Clojure, даже такие вещи, как выражения if
или конструкции циклов, или определения функций уровня или инструкции печати, которые на других языках являются "утверждениями". Там нет дихотомии постановки/выражения в Lisps; все это выражение.
So println
и друзья печатают на стандартный вывод как побочный эффект и возвращают nil
, как и большинство функций, которые не имеют ничего полезного для возврата.
Но ввод строки в REPL должен возвращать сама строка, как в сообщении digitalross '.
user> (println "hello world")
hello world
nil
user> "hello world"
"hello world"
user>
В первом случае строка hello world
- это то, что было напечатано на стандартный вывод на println
. nil
- возвращаемое значение println
. Во втором случае "hello world"
- это возвращаемое значение "hello world"
, поскольку строка оценивает себя. В этом случае ничего не печатается на стандартный вывод.
(SLIME и некоторые другие REPL-интерфейсы будут по-разному окрашивать стандартный вывод (строка hello world
выше) по сравнению с возвращаемым значением того, что вы набрали в REPL (nil
выше), так как это может ввести в заблуждение иначе. )
Это то, что вы должны увидеть в REPL. То, что вы разместили, должно быть артефактом Enclojure.
Это не делает меня для меня на Clojure 1.0.0 -
$ java -cp clo*.jar clojure.lang.Repl
Clojure 1.0.0-
user=> "hello, world"
"hello, world"
user=>
Есть несколько недавних ошибок, связанных с интерпретацией последовательности строк CRLF в виде двух разных выражений под окнами. Возвращаемое значение строки в clojure должно быть строкой.
Я думаю, что это возвращаемое значение вашего выражения. Это случай в рубине с методом puts.