Maven kullanarak JAR dosyası olarak oluşturduğum bir Clojure programım var. JAR Manifest'ine gömülü, yapı zaman damgası da dahil olmak üzere bir yapı-versiyon numarasıdır.Çalışma zamanında Clojure "sabitlerini" ayarlama
kolayca aşağıdaki kodu kullanarak JAR Manifest dan zamanında bunu okuyabilir:
(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"))))
ama defn
içeride def
kullanmak kötü karma olduğu söylendi.
Çalışma zamanında sabit ayarlamak için Clojure-deyimsel yolu nedir? Açıkçası kodumda def
olarak gömmek için sürüm bilgisi bilgisi yok, ancak program başladığında main
işlevinden bir kez (ve hepsine) ayarlanmasını istiyorum. Daha sonra çalışan kodun geri kalanına def
olarak ulaşılabilir olmalıdır.
UPDATE: BTW, Clojure, uzun zamandır karşılaştığım en havalı dillerden biri olmalı. Rich Hickey için Kudos!
Denemedim, ama yapacağım. Enteresan görünüyor. Değer belirlendiğinde performans cezası yok. Komut satırı seçeneklerinden değerleri ayarlamak için bu tekniği de kullanabilirim - sadece bir kez ayarlanması gerekir. – Ralph