【发布时间】:2016-12-09 10:21:01
【问题描述】:
我的问题是:如何获取接收函数的 args 列表和表达式?
我正在尝试做这样的事情:
(defn first-fn [[args exprs]]
(println "Args:" args)
(println "Exprs:" exprs))
(first-fn (fn [a b c] (println "something")))
所以,first-fn 会打印:
Args: [a b c]
Exprs: (println "something")
我的目标是创建一个可以使用接收函数的args列表的宏。
谢谢。
编辑:
用例:
我正在使用 compojure https://github.com/weavejester/compojure
你可以这样定义路由:
(GET "/:id" [id] (body_here id))
但我想将语法更改为:
(defn handler-fn [id] (body_here id))
...
(GET "/:id" handler-fn)
所以处理程序(主体)可以从路由中提取出来,也可以被重用。
我尝试重用编译路由https://github.com/weavejester/compojure/blob/master/src/compojure/core.clj#L172
(defmacro MY_GET [path fn-src]
(let [fn-fn (second fn-src)
arg-vec (nth fn-src 2)
forms (drop 3 fn-src)]
(compojure.core/compile-route :get path arg-vec forms)))
但是当我打电话时:
(MY_GET "/:id" handler-fn)
上面写着:Don't know how to create ISeq from: clojure.lang.Symbol
【问题讨论】:
-
你能举一个用例的例子吗?这可能有助于澄清目标/方法。
标签: clojure