我有一個以下Clojure的代碼渲染功能使用enlive-HTML這使得一個HTML頁面。根據所選語言,使用不同的html模板。如何減少下面Clojure代碼中的重複項?
正如你可以看到,有很多重複的代碼,我想將其刪除。
我正在考慮編寫一些宏,但如果我理解正確,語言(即lang參數)在宏執行時不可用,因爲它在請求中提供,並且處於執行時並且不處於編譯時。
我還試圖修改enlive爲了在以後的某個點添加國際化支持,但我Clojure的技能還沒有。
所以問題是:
如何刪除在下面的代碼的代碼重複?
是enlive-HTML的方式去還是我應該用另一個庫? 有沒有類似於支持i18n的圖書館?
謝謝!
在這裏看到的代碼:
(ns myapp.core
(:require [net.cgrand.enlive-html :as e))
(deftemplate not-found-en "en/404.html"
[{path :path}]
[:#path] (e/content path))
(deftemplate not-found-fr "fr/404.html"
[{path :path}]
[:#path] (e/content path))
(defn getTemplate [page lang]
(case lang
:en (case page
:page/not-found not-found-en)
:fr (case page
:page/not-found not-found-fr)))
(defn render [lang [page params]]
(apply (getTemplate page lang) params))
究竟你的意思是,回覆:「語言是不是可以在宏執行時間」? –
...如果你的宏正在生成你的'deftemplate',你只需要在編譯時運行它們來執行那個執行。 –
這屬於http:// codereview。stackexchange.com/因爲它已經有效。 – tar