Noir宏 defpage
给我带来了一些麻烦。我正在尝试构建与此类似的调用:
(defpage [:post "some/url"] [data]
;; some stuff...
)
但是,我不想使用关键字 :post
,而是使用变量,如下所示:
(def my-method :post)
(defpage [my-method "some/url"] [data]
;; some stuff...
)
问题是当宏扩展时,它想要解析 compojure.core
命名空间中的变量 my-method
而不是我自己的,给我错误:
No such var: compojure.core/MY-METHOD
如何强制 my-method
在当前上下文中解析?
最佳答案
我想这是一个类似的问题:How can I apply clojure's doc function to a sequence of functions 一个宏可以用它的参数做任何它想做的事情,所以传递一个裸符号可能会导致不可预知的结果。
一种解决它的方法,但它并不漂亮:
(eval (list 'defpage (vector my-method "some/url") '[data]
; some stuff
))
请注意,我的方法在这里不是文字,因此在进入 eval 之前,它首先在我们自己的命名空间中解析和评估。
关于macros - 传递给宏的变量在错误的命名空间中被解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8371850/