Когда вы вводите «привет, мир» в Clojure REPL, почему там написано «ноль»?

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

  •  06-07-2019
  •  | 
  •  

Вопрос

Я ввел это в Clojure REPL (используя плагин enclojure Netbeans):

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

О чем говорит ноль?

Это было полезно?

Решение

Каждый вызов функции или макроса возвращает значение в Clojure, даже такие вещи, как операторы if или циклические конструкции, или определения функций верхнего уровня, или операторы печати, которые в других языках являются "операторами". В Лиспе нет дихотомии оператор / выражение; все является выражением.

Итак, 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 должно быть самой строкой.

я думаю, что это возвращаемое значение вашего выражения.Так обстоит дело в Ruby с методом puts.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top