The Noir macro defpage
给我带来了一点麻烦。我正在尝试构建与此类似的调用:
(defpage [:post "some/url"] [data]
;; some stuff...
)
但是,不要使用关键字:post
我想使用一个变量,如下所示:
(def my-method :post)
(defpage [my-method "some/url"] [data]
;; some stuff...
)
问题是当宏展开时,它要解析变量my-method
in the compojure.core
命名空间而不是我自己的命名空间,给我错误:
No such var: compojure.core/MY-METHOD
我怎样才能强迫my-method
在当前背景下解决?
我想这与以下问题类似:如何将 clojure 的 doc 函数应用于一系列函数宏可以对其参数执行任何操作,因此传递裸符号可能会导致不可预测的结果。
解决这个问题的方法,但它并不漂亮:
(eval (list 'defpage (vector my-method "some/url") '[data]
; some stuff
))
请注意,这里的 my-method 不是文字,因此在进入 eval 之前,它首先在我们自己的名称空间中解析和评估。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)