我认为你可能想说 :cljs
而不是 :cljc
。
我认为主要问题是,new
是一个特殊形式,需要编译器可以识别的符号,而不是运行时变量。您可以使用 ex-info
进行通用处理,但如果您想利用宿主平台的具体错误类型,可能会尝试以下类似的方案
(defn oob-error
[message]
#?(:clj (new ArrayIndexOutOfBoundsException message)
:cljs (new js/RangeError message))
(throw (oob-error "message"))