9 Stimmen

Clojure "Konstanten" zur Laufzeit setzen

Ich habe ein Clojure-Programm, das ich mit Maven als JAR-Datei erstelle. Das JAR-Manifest enthält eine Build-Versionsnummer, einschließlich des Build-Zeitstempels.

Mit dem folgenden Code kann ich dies zur Laufzeit leicht aus dem JAR-Manifest auslesen:

(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"))))

aber mir wurde gesagt, dass es schlechtes Karma ist, wenn man def innerhalb defn .

Was ist der Clojure-idiomatische Weg, um eine Konstante zur Laufzeit zu setzen? Ich habe offensichtlich keine Informationen über die Build-Version, die ich in meinen Code als def aber ich möchte, dass es einmal (und für immer) von der main wenn das Programm startet. Sie sollte dann als eine der folgenden Funktionen verfügbar sein def für den Rest des laufenden Codes.

UPDATE : Clojure ist übrigens eine der coolsten Sprachen, die mir seit langem untergekommen sind. Großes Lob an Rich Hickey!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X