Вложенные типы в clojure?

В 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
7
задан Rob Lachlan 30 December 2009 в 00:44
поделиться

2 ответа

Для каждого типа по умолчанию создается тег типа (в основном ключевое слово, соответствующее пространству имён), так что Вам не нужно AOT-компилировать свой код перед тем, как Вы сможете использовать результирующий класс.

Если тип A находится в текущем пространстве имен, вы можете написать его так:

(deftype B [^::A Avalue])

Для типов в других пространствах имен, квалифицируйте ключевое слово, используя его пространство имен:

(deftype B [^:user/A Avalue])
11
ответ дан 6 December 2019 в 15:23
поделиться

(Deftype B [#^:user/A Avalue]) работает на меня.

3
ответ дан 6 December 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: