Язык Forth предлагает механизм экранирования "во время компиляции", где код может быть выполнен немедленно, пока компилятор работает (не во время выполнения). Вы можете включить операторы печати, например, для отладки сложного синтаксиса или ошибок типа).
Есть ли у 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"))))