Язык Forth предлагает "время компиляции" механизм escape, при котором код может быть выполнен немедленно, пока компилятор работает (не во время выполнения). Вы можете включать операторы печати, например, для отладки сложного синтаксиса или ошибок типа.)
Есть ли в Clojure что-нибудь подобное? Я получаю исключение IllegalArgumentException во время компиляции в одном из вызовов моей функции и хочу добавить оператор печати во время компиляции для определения типа аргумента ( (. GetClass)
).
Спасибо.
] ОБНОВЛЕНИЕ : Вот полный defn
, который не дает компиляции:
(ns my.ns.name
(:gen-class
:main true)
(:use
[clojure.contrib.str-utils2 :only (join)])
(:import
[java.io PrintWriter]
[java.net URL]
[java.util.concurrent Executors]
[java.util.jar Manifest]
[org.apache.commons.cli CommandLine HelpFormatter Options Option ParseException PosixParser]))
(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"))))
Этот defn
работает:
(defn set-version
"Set the version variable to the build number."
[]
(println (str (.getClass my.ns.name)))
(def version
(-> (str "jar:" (-> my.ns.name (.getProtectionDomain)
(.getCodeSource)
(.getLocation))
"!/META-INF/MANIFEST.MF")
(URL.)
(.openStream)
(Manifest.)
(.. getMainAttributes)
(.getValue "Build-number"))))