如何在 Clojure 中消除歧义
How to disambiguate in Clojure
我在没有 import/require/use 任何其他包的命名空间中有这个函数:
(defn crash [msg]
(throw (Throwable. msg)))
Cursive(IntelliJ IDEA IDE 插件)突出显示 Throwable
并给我消息 Cannot disambiguate overloads of Throwable
。我收到与 Exception
和 Error
相同的消息。
我不明白此消息的来源 - 我怀疑这些 Java 类 是在除 Java 语言之外的任何其他 jar 文件中定义的。有什么办法可以让这条消息消失吗?
这些在 project.clj
:
:dependencies [[org.clojure/clojure "1.6.0"]
[net.mikera/imagez "0.8.0"]
[org.clojure/math.numeric-tower "0.0.4"]]
Throwable
有两个 1-arg 构造函数 (doc):一个期望 String
,另一个期望 Throwable
.
在运行时 Clojure 会弄明白(因为在这种特定情况下,一个对象不可能既是 String
又是 Throwable
),但这需要使用反射。
向 msg
添加类型提示以指定您希望使用的重载将消除反射的需要,并有望使 Cursive 平静下来。
(defn crash [^String msg]
(throw (Throwable. msg)))
我在没有 import/require/use 任何其他包的命名空间中有这个函数:
(defn crash [msg]
(throw (Throwable. msg)))
Cursive(IntelliJ IDEA IDE 插件)突出显示 Throwable
并给我消息 Cannot disambiguate overloads of Throwable
。我收到与 Exception
和 Error
相同的消息。
我不明白此消息的来源 - 我怀疑这些 Java 类 是在除 Java 语言之外的任何其他 jar 文件中定义的。有什么办法可以让这条消息消失吗?
这些在 project.clj
:
:dependencies [[org.clojure/clojure "1.6.0"]
[net.mikera/imagez "0.8.0"]
[org.clojure/math.numeric-tower "0.0.4"]]
Throwable
有两个 1-arg 构造函数 (doc):一个期望 String
,另一个期望 Throwable
.
在运行时 Clojure 会弄明白(因为在这种特定情况下,一个对象不可能既是 String
又是 Throwable
),但这需要使用反射。
向 msg
添加类型提示以指定您希望使用的重载将消除反射的需要,并有望使 Cursive 平静下来。
(defn crash [^String msg]
(throw (Throwable. msg)))