次のマクロがあります。
(defmacro ss [x]
`(clojureql.core/select
(clojureql.core/table db "users_table")
(clojureql.core/where ~x)
)
)
(macroexpand '(ss '(= :type "special")))
:しかし、それは生成します:
(clojureql.core/select (clojureql.core/table oe.db.dbcore/db "users_table") (clojureql.core/where '(= :type "special")))
: それ以外の :
(clojureql.core/select (clojureql.core/table oe.db.dbcore/db "users_table") (clojureql.core/where (= :type "special")))
: 問題は、リスト '(= :type "special") を渡していることですが、これをマクロで引用符から外すにはどうすればよいでしょうか?
アップデート:
これを行うことによるミケラの答えのおかげで、私は最終的にこれを機能させました:
(defn ss [x]
(clojureql.core/select
(clojureql.core/table db "users_table")
x
)
)
(macroexpand '(ss (eval `(clojureql.core/where ~'(= :type "special")))))
: 出力はわずかに異なりますが、期待どおりに動作します。
(ss (eval (clojure.core/seq (clojure.core/concat (clojure.core/list 'clojureql.core/where) (clojure.core/list '(= :type "special"))))))