3
我有一个产生函数的宏。我知道最好的做法是使用gensyms来确保不会发生命名冲突。所以我想知道如果我需要遵循这个原则为宏的函数的参数名称定义?卫生宏:函数参数名称?
这里是我的宏以供参考:
(defmacro defroute
[routename uri meths handler]
`(defn ~routename
[~'req]
(let [req-meth# (:request-method ~'req)
bad-meth# (nil? (some #(= req-meth# %) ~meths))
any-meth# (= ~meths [:any])]
(if (:uri ~'req)
(if (and (route-matches ~uri ~'req) (and bad-meth# (not any-meth#)))
(method-not-allowed req-meth# (get-allowed ~meths))
(let [params# (route-matches ~uri ~'req)]
(if (nil? params#)
~'req
(~handler (assoc ~'req :route-params params#)))))
~'req))))
正如你所看到的,我没有使用当前为req
参数gensym。我原本想知道是否有必要。无论如何,感谢阅读。
太好了,谢谢你的解释!你是对的:追加'#'当然没有额外的努力。 – maxcountryman