clojure中的嵌套类型?

时间:2009-12-29 19:27:07

标签: clojure deftype

在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

2 个答案:

答案 0 :(得分:11)

对于每个deftype,都会创建一个类型标记(基本上是一个名称空间限定的关键字),因此您无需在使用结果类之前对代码进行AOT编译。

如果类型A在当前名称空间中,您可以这样写:

(deftype B [^::A Avalue])

对于其他命名空间中的类型,请使用其命名空间限定关键字:

(deftype B [^:user/A Avalue])

答案 1 :(得分:3)

(deftype B [#^:user / A Avalue])适合我。