环请求图解构宏
Ring request map deconstruction macro
正在尝试使用宏从环请求映射中解构参数。工作正常:
(defmacro defpage [fname args & body]
`(defn ~fname [{{:keys ~args} :params}]
~@body))
(defpage h-projects [name description]
; some code using name and description...
)
(defroutes app-routes
(ANY "/p/" [] h-projects)
但是,我希望能够直接在 h-projects 函数中使用请求映射:
(defpage h-projects [name description]
; some code using name and description, and also
; the request map.
)
如何修改 defpage 宏以使请求映射可用于 h-projects 函数?
我知道我可以更改 h-projects 函数的参数,但我想保留带有参数的简单向量,而不是一些深层嵌套的解构图。
You can destructure with the :as
keyword to get a handle on the entire destructured map. 要在宏中执行此操作,我建议您输入名称应该是什么:
(defmacro defpage [fname args map-name & body]
`(defn ~fname [{{:keys ~args :as ~map-name} :params}]
~@body))
但您也可以选择只定义所有 defpage
共享的 "magic name"。这有点不清晰,因为当你读到 defpage
时,它看起来像是凭空冒出来的名字。
(defmacro defpage [fname args & body]
`(defn ~fname [{{:keys ~args :as ~'my-magic-name} :params}]
~@body))
~' 允许命名空间捕获。
正在尝试使用宏从环请求映射中解构参数。工作正常:
(defmacro defpage [fname args & body]
`(defn ~fname [{{:keys ~args} :params}]
~@body))
(defpage h-projects [name description]
; some code using name and description...
)
(defroutes app-routes
(ANY "/p/" [] h-projects)
但是,我希望能够直接在 h-projects 函数中使用请求映射:
(defpage h-projects [name description]
; some code using name and description, and also
; the request map.
)
如何修改 defpage 宏以使请求映射可用于 h-projects 函数?
我知道我可以更改 h-projects 函数的参数,但我想保留带有参数的简单向量,而不是一些深层嵌套的解构图。
You can destructure with the :as
keyword to get a handle on the entire destructured map. 要在宏中执行此操作,我建议您输入名称应该是什么:
(defmacro defpage [fname args map-name & body]
`(defn ~fname [{{:keys ~args :as ~map-name} :params}]
~@body))
但您也可以选择只定义所有 defpage
共享的 "magic name"。这有点不清晰,因为当你读到 defpage
时,它看起来像是凭空冒出来的名字。
(defmacro defpage [fname args & body]
`(defn ~fname [{{:keys ~args :as ~'my-magic-name} :params}]
~@body))
~' 允许命名空间捕获。