私はこの関数を持っています:
(defn handler [request]
(case (request :uri)
"/" (home request)
"/good" (good request)
"/evil" (evil request)
"/neutral" (neutral request)
(status-response 404 (str "<h1>404 Not Found: " (:uri request) "</h1>" ))))
しかし、私は同じ名前の関数に解決されるページのリストを変更し続けており、次のように記述できるようにしたいと思います。
(def-handler善悪ニュートラル)
代わりは:
しかし、私は立ち往生しています。これまでの私のベストショットは次のようになります。
(defmacro def-handler [& addresses]
`(defn handler [request#]
(case (request# :uri)
~@(mapcat (fn[x] [(str "/" x) (list x 'request)]) addresses)
"/" (home request#)
(status-response 404 (str "<h1>404 Not Found: " (:uri request#) "</h1>" )))))
しかし、生成された呼び出しの要求はgensymではないため、完全には機能しません。そこでgensymを取得する方法がわかりません。
これは、新しいgensymが作成されたことに気付くまで、有望に見えました。
(defmacro def-handler [& addresses]
`(defn handler [request#]
(case (request# :uri)
~@(mapcat (fn[x] [(str "/" x) `( ~x request#)]) addresses)
"/" (home request#)
(status-response 404 (str "<h1>404 Not Found: " (:uri request#) "</h1>" )))))