В clojure, как я ввожу подсказку типа тип, который я создал? (Я хочу вложить типы.)
например, Я думал, что это будет работать:
(deftype A
[#^somePrimitive someField])
(deftype B
[#^A Avalue])
Это поднимает сообщение об ошибке:
Unknown location:
error: java.lang.ClassNotFoundException: A
Примечание: типы clojure являются новой возможностью, которая в настоящее время существует только в 'новом' ответвлении clojure.
Править: Я был смущен различными способами типа, подсказывающего в clojure для типов clojure и Java. классам Java подсказывают как
#^java.some.class
в то время как типам clojure подсказывают как:
#^:some.Namespace/type
Для каждого типа по умолчанию создается тег типа (в основном ключевое слово, соответствующее пространству имён), так что Вам не нужно AOT-компилировать свой код перед тем, как Вы сможете использовать результирующий класс.
Если тип A находится в текущем пространстве имен, вы можете написать его так:
(deftype B [^::A Avalue])
Для типов в других пространствах имен, квалифицируйте ключевое слово, используя его пространство имен:
(deftype B [^:user/A Avalue])