clojure中的嵌套类型?

Rob*_*lan 7 clojure deftype

在clojure中,如何键入类型提示我创建的类型?(我想嵌套类型.)

我以为这会起作用:

(deftype A 
    [#^somePrimitive  someField])

(deftype B
    [#^A Avalue])
Run Code Online (Sandbox Code Playgroud)

这会显示一条错误消息:

Unknown location:
  error: java.lang.ClassNotFoundException: A
Run Code Online (Sandbox Code Playgroud)

注意:clojure类型是一个新功能,目前只存在于clojure的"new"分支中.

编辑:我对java和clojure类型的clojure类型提示的不同方式感到困惑.java类被暗示为

#^java.some.class
Run Code Online (Sandbox Code Playgroud)

而clojure类型暗示为:

#^:some.Namespace/type
Run Code Online (Sandbox Code Playgroud)

Dan*_*ner 11

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

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

(deftype B [^::A Avalue])
Run Code Online (Sandbox Code Playgroud)

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

(deftype B [^:user/A Avalue])
Run Code Online (Sandbox Code Playgroud)