Я новичок в clojure и читал книгу, содержащую эту функцию:
(defn illustrative-function [] (+ 1 304) 30 "joe")
И если вы вызовете эту функцию без аргумента, она вернет только «joe», как вы можете видеть:
(illustrative-function )
=> "joe"
Мой вопрос:
Почему числа внутри функции не печатаются? 305 и 30? Даже когда я использую и аргумент (и параметр), он ничего не возвращает:
(defn illustrative-function [x] x (+ 1 304) 30 "joe")
=> #'dev-projects.core/illustrative-function
(illustrative-function 3)
=> "joe"
(illustrative-function [3])
=> "joe"
Может кто-нибудь объяснить, почему так происходит?
Почему не печатаются целые числа и аргументы?
Спасибо!
Тело defn
завернуто в do
. do
позволяет выполнять
несколько инструкций обычно для побочных эффектов. Последнее заявление в
do
- это возврат. Итак, это выглядит так:
(defn illustrative-function
[]
(do
(+ 1 304) ; no-op
30 ; no-op
"joe")) ; return
(+ 1 304)
читается и вычисляется, а затем выбрасывается. 30
это просто
прочитал и выбросил. "joe"
то это возвращение do
и тем самым
возврат функции.
Если вы хотите что-то «напечатать», вы должны явно print
это сделать.
Например. заменить 30
на (println 30)
. Также обратите внимание, что в REPL
возвращаемое значение печатается в REPL - если вы вызываете эту функцию из
где-то еще ничего не печатается, если вы не печатаете явно.