2009-12-29 26 views
7

clojure içinde, oluşturduğum türde bir ipucu nasıl yazarım? (Türleri yuvalamak istiyorum.)İç içe türler clojure içinde mi?

ör. Bu işe olacağını düşünmüştü:

(deftype A 
    [#^somePrimitive someField]) 

(deftype B 
    [#^A Avalue]) 

Bu bir hata mesajı getirir:

Unknown location: 
    error: java.lang.ClassNotFoundException: A 

Not: Clojure tipleri şu anda sadece Clojure 'Yeni' dalında var olan bir yeni bir özelliktir.

Düzenleme: Ben java ve clojure türleri için clojure tür ipuçlarının farklı yollar tarafından kafam karıştı. Clojure tipleri olarak ima ederken java sınıfları

#^java.some.class 

olarak ima edilir:

#^:some.Namespace/type 

cevap

11

Her deftype için, bir tür etiketi (temelde ad alanı bakımından kalifiye bir anahtar kelime) oluşturulur; böylece, sonuç sınıfını kullanabilmeniz için kodunuzu AOT derlemenize gerek kalmaz. A tipi Geçerli isim ise

, bunu şöyle yazabiliriz: diğer ad alanlarında türleri için

(deftype B [^::A Avalue]) 

, onun ad kullanarak anahtar kelimeyi nitelemek: görünüyor

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

Harika, teşekkürler! –

3

(deftype B [# ^:/A Avalue kullanıcı]) benim için çalışıyor.

+0

çalışmak ama sonra aynı şeyi diğer dosyalarda nasıl yaparım? Her neyse +1. –

+0

Yup, şimdi anladım. Çok teşekkürler. –