在clojure中,如何键入类型提示我创建的类型? (我想嵌套类型。)
e.g。我原以为这会起作用:
(deftype A
[#^somePrimitive someField])
(deftype B
[#^A Avalue])
这会显示错误消息:
Unknown location:
error: java.lang.ClassNotFoundException: A
注意:clojure类型是一个新功能,目前只存在于clojure的“new”分支中。
编辑:我对java和clojure类型的clojure类型提示的不同方式感到困惑。 java类被暗示为
#^java.some.class
虽然clojure类型被暗示为:
#^:some.Namespace/type
答案 0 :(得分:11)
对于每个deftype,都会创建一个类型标记(基本上是一个名称空间限定的关键字),因此您无需在使用结果类之前对代码进行AOT编译。
如果类型A在当前名称空间中,您可以这样写:
(deftype B [^::A Avalue])
对于其他命名空间中的类型,请使用其命名空间限定关键字:
(deftype B [^:user/A Avalue])
答案 1 :(得分:3)
(deftype B [#^:user / A Avalue])适合我。