DL
quasiquote - как quote, но внутри ~ эвалятся
Size: a a a
DL
E
DL
> '(:a (+ 1 2))
(:a (+ 1 2))
> `(:a (+ 1 2))
(:a (clojure.core/+ 1 2))
> `(:a ~(+ 1 2))
(:a 3)
E
DL
DL
> `(:a ~@[1 2])
(:a 1 2)
DL
DL
ST
quote
😊ST
quote
😊E
ST
ST
code
используются символы conn
и так далееcode
, как параметры в макросST
code
используются символы conn
и так далееcode
, как параметры в макрос(megamacro [conn db call] code ...)
ST
(megamacro [conn db call] code ...)
fn
работаетST
(megamacro [conn db call] code ...)
(defmacro megamacro
[[connection, database, coll] code]
`(let [~connection (mg/connect)
~database (mg/get-db ~connection "monger-test")
~coll "documents"]
~code))
=> #'dev.playground/megamacro
(macroexpand '(megamacro [conn db coll] :code))
=> (let* [conn (mg/connect) db (mg/get-db conn "monger-test") coll "documents"] :code)
ST
(defmacro megamacro
[[connection, database, coll] code]
`(let [~connection (mg/connect)
~database (mg/get-db ~connection "monger-test")
~coll "documents"]
~code))
=> #'dev.playground/megamacro
(macroexpand '(megamacro [conn db coll] :code))
=> (let* [conn (mg/connect) db (mg/get-db conn "monger-test") coll "documents"] :code)
conn
например не используется в code
, то его можно скрыть и использовать только в макросе для получения db
. Тогда будет только два байндинга.DL
DL