2024 Clojure状态调查!中分享你的想法。

欢迎!请参阅关于页面以获取更多关于此如何工作的信息。

0
ClojureScript

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

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

(throw (new ErrorType "message"))

但是这段代码会失败并显示一个错误,说“找不到类ErrorType”。正确的方式是怎样的呢?

2 答案

+1

selected
 
最佳答案

我认为你应该是指:cljs而不是:cljc

我怀疑这里的主要问题是new是一个特别形式,它需要一个编译器可识别的符号,而不是一个运行时变量。你可以使用ex-info来 Portable,但如果你想利用宿主平台的特定错误类型,你可能尝试类似这样的方法

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

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

您认为能否使用 ex-info 构造一个异常,然后在 Clojure 和 ClojureScript 中都能可移植地抛出这个异常,对吗?

...