欢迎!请参阅关于页面以获取更多关于此如何工作的信息。
我正在编写一个需要抛出错误的cljc库。这是我尝试的方式
(def ErrorType #?(:clj java.lang.Exception :cljc js/Error) (throw (new ErrorType "message"))
但是这段代码会失败并显示一个错误,说“找不到类ErrorType”。正确的方式是怎样的呢?
我认为你应该是指:cljs而不是:cljc。
:cljs
:cljc
我怀疑这里的主要问题是new是一个特别形式,它需要一个编译器可识别的符号,而不是一个运行时变量。你可以使用ex-info来 Portable,但如果你想利用宿主平台的特定错误类型,你可能尝试类似这样的方法
new
ex-info
(defn oob-error [message] #?(:clj (new ArrayIndexOutOfBoundsException message) :cljs (new js/RangeError message)) (throw (oob-error "message"))
您认为能否使用 ex-info 构造一个异常,然后在 Clojure 和 ClojureScript 中都能可移植地抛出这个异常,对吗?