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