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 构建一个异常并发送它,对吧?

...