Definindo "constantes" do Clojure em tempo de execução
Eu tenho um programa Clojure que eu construo como um arquivo JAR usando o Maven. Incorporado no manifesto JAR está um número da versão de construção, incluindo o carimbo de data / hora da construção.
Eu posso ler isso facilmente em tempo de execução no manifesto JAR usando o seguinte código:
(defn set-version
"Set the version variable to the build number."
[]
(def version
(-> (str "jar:" (-> my.ns.name (.getProtectionDomain)
(.getCodeSource)
(.getLocation))
"!/META-INF/MANIFEST.MF")
(URL.)
(.openStream)
(Manifest.)
(.. getMainAttributes)
(.getValue "Build-number"))))
mas me disseram que é um karma ruim usardef
dentrodefn
.
Qual é a maneira idiomática de Clojure para definir uma constante no tempo de execução? Obviamente, não tenho as informações da versão de compilação para incorporar no meu código como umdef
, mas gostaria que fosse definido uma vez (e para todos) a partir domain
função quando o programa é iniciado. Ele deve estar disponível como umdef
para o restante do código em execução.
ATUALIZAR: Aliás, o Clojure deve ser uma das linguagens mais legais que já encontrei há um bom tempo. Parabéns ao Rich Hickey!