В библиотеке compojure в основном пространстве имен я вижу следующую форму:
(defn- compile-route
"Compile a route in the form (method path & body) into a function."
[method route bindings body]
`(#'if-method ~method
(#'if-route ~(prepare-route route)
(fn [request#]
(let-request [~bindings request#]
(render (do ~@body) request#))))))
и
(defmacro GET "Generate a GET route."
[path args & body]
(compile-route :get path args body))
Далее в файлеФункции if-method
и if-route
определяются с помощью defn-
s.
Я не понимаю значения #'
в этой функции compile-route
.Документы для (var ...)
говорят:
Символ должен преобразовываться в var, и возвращается сам объект Var (не его значение).Макрос читателя # 'x расширяется до (var x).
Но для меня, в контексте того, что происходит (т.е. вызывается из defmacro), это просто звучит так, как будто это означаетсимвола будет возвращено, что аналогично тому, как звучит заменяемость:
(def x 5)
(+ x 7)
-> 12
т.е. (+ x 7)
расширяется до или совпадает с (+ 5 7)
Чтоя здесь скучаю?