我最近一直在玩 Compojure,并且我有一个小的基本 web 应用程序。对于我的 HTML 模板,我使用的是 Enlive,并且我有一个包含所有简单静态页面的名称空间。这些页面的 defroute 调用如下所示:
(defroutes public-routes
(GET "/" []
(info/index-template))
(GET "/about" []
(info/about-template))
(GET "/contact" []
(info/contact-template)))
我实际上还有更多,但这应该可以让我知道我在做什么。
现在,我想,这实际上只是我的一堆重复,所以我想我会尝试以下方法:
(defroutes info-routes
(map #(GET (str "/" %) [] (ns-resolve 'webapp.pages.info
(symbol (str % "-template"))))
'("about" "contact")))
当然,这是行不通的,因为 map 返回的是惰性序列,而不是函数体 (?)。有人知道我需要做什么才能让这个想法发挥作用吗?
还是我应该使用完全不同的方法来减少重复自己?