请在 2024年的Clojure调查 中分享您的想法!

欢迎!请参阅关于 页面了解有关此工作的更多信息。

0
ClojureScript

我正在编写一个需要抛出错误的 cljc 库。这是我尝试的方法

(def ErrorType #?(:clj java.lang.Exception
                  :cljc js/Error)

(throw (new ErrorType "message"))

但这段代码以一个错误信息“找不到类 ErrorType”而失败。正确的方法是什么呢?

2 答案

+1

被选为最佳答案
 
最佳答案

我认为你可能想说 :cljs 而不是 :cljc

我认为主要问题是,new 是一个特殊形式,需要编译器可以识别的符号,而不是运行时变量。您可以使用 ex-info 进行通用处理,但如果您想利用宿主平台的具体错误类型,可能会尝试以下类似的方案

(defn oob-error
  [message]
  #?(:clj (new ArrayIndexOutOfBoundsException message)
     :cljs (new js/RangeError message))

(throw (oob-error "message"))
+1

你认为是否可以在Clojure和ClojureScript中以可移植的方式使用ex-info构建异常并抛出呢?

...