我需要在宏内部进行排序, 我有这样的地图集:
(def persons '({:id 1 :name "olle"} {:id 2 :name "anna"} {:id 3 :name "isak"} {:id 4 :name "beatrice"}))
如果我尝试(sort-by :name persons)
它可以正常工作并将其排序
但在宏中:
(defmacro select
[columns _ map _ where _ order]
`(sort-by ~order ~@map))
它没有排序。
REPL(clojure.core / sort-by:name persons)
答案 0 :(得分:0)
~@map
子句中有错误。您在此处不需要@
。该符号扩展了一个序列,例如, [1 2 3] -> 1 2 3
。
工作代码:
(defmacro select
[columns _ map _ where _ order]
`(sort-by ~order ~map))
检查扩展宏:
(macroexpand '(select nil nil persons nil nil nil :id))
(clojure.core/sort-by :id persons)