2009-12-29 38 views
7

Trong clojure, làm cách nào để nhập loại gợi ý một loại mà tôi đã tạo? (Tôi muốn lồng các loại.)Các loại lồng nhau trong clojure?

ví dụ: Tôi đã nghĩ rằng điều này sẽ làm việc:

(deftype A 
    [#^somePrimitive someField]) 

(deftype B 
    [#^A Avalue]) 

này sẽ trả về một thông báo lỗi:

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

Lưu ý: Các loại clojure là tính năng mới mà hiện nay chỉ tồn tại trong 'mới' chi nhánh của clojure.

Chỉnh sửa: Tôi đã nhầm lẫn với các cách khác nhau của loại gợi ý trong clojure cho các loại java và clojure. lớp java được gợi ý như

#^java.some.class 

trong khi loại clojure được gợi ý như:

#^:some.Namespace/type 

Trả lời

11

Đối với mỗi deftype, thẻ loại (về cơ bản là từ khóa đủ điều kiện không gian tên) được tạo nên bạn không phải biên dịch mã của bạn trước khi bạn có thể sử dụng lớp kết quả.

Nếu loại A là trong không gian tên hiện tại, bạn có thể viết nó như thế này:

(deftype B [^::A Avalue]) 

Đối với các loại trong không gian tên khác, đủ điều kiện từ khóa using namespace của nó:

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

Tuyệt vời, cảm ơn! –

3

(deftype B [# ^: hướng dẫn/A Avalue]) làm việc cho tôi.

+0

Đó dường như làm việc , nhưng sau đó làm thế nào tôi sẽ làm điều tương tự trong các tập tin khác? 1, dù sao đi nữa. –

+0

Yup, tôi đã tìm ra nó ngay bây giờ. Cảm ơn rất nhiều. –

Các vấn đề liên quan