Tôi có một chương trình Clojure mà tôi xây dựng dưới dạng tệp JAR sử dụng Maven. Nhúng trong Tệp kê khai JAR là số phiên bản xây dựng, bao gồm dấu thời gian xây dựng.Đặt Clojure "hằng số" tại thời gian chạy
tôi có thể dễ dàng đọc này trong thời gian chạy từ JAR Manifest sử dụng đoạn mã sau:
(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"))))
nhưng tôi đã được cho biết rằng đó là nghiệp chướng xấu để sử dụng def
bên defn
.
Cách thành ngữ Clojure để đặt hằng số khi chạy là gì? Tôi rõ ràng không có thông tin phiên bản xây dựng để nhúng vào mã của tôi dưới dạng def
, nhưng tôi muốn nó được đặt một lần (và cho tất cả) từ chức năng main
khi chương trình bắt đầu. Sau đó, nó sẽ có sẵn dưới dạng def
cho phần còn lại của mã đang chạy.
CẬP NHẬT: BTW, Clojure phải là một trong những ngôn ngữ tuyệt vời nhất mà tôi đã gặp trong một thời gian dài. Kudos đến Rich Hickey!
Tôi chưa thử, nhưng tôi sẽ làm. Trông nó thật thú vị. Không có hình phạt hiệu suất khi giá trị được đặt. Tôi cũng có thể sử dụng kỹ thuật này để thiết lập các giá trị từ các tùy chọn dòng lệnh - chỉ cần thiết lập một lần. – Ralph