我正在尝试编写一个宏,它将在Clojure中捕获编译时错误.具体来说,我想捕获当调用并clojure.lang.Compiler$CompilerException抛出一个尚未针对该数据类型实现的协议方法时抛出的异常.
到目前为止,我有:
(defmacro catch-compiler-error
[body]
(try
(eval body)
(catch Exception e e)))
但当然,我被告知这eval是邪恶的,你通常不需要使用它.有没有办法实现这个而不使用eval?
我倾向于认为这eval是合适的,因为我特别希望在运行时而不是在编译时评估代码.