2012-11-26 22 views
17

Tôi đã đọc ở một vài nơi mà không gian tên phân đoạn đơn lẻ không được khuyến khích trong clojure.Có gì sai với các không gian tên phân khúc đơn?

Thực tế hầu như mọi thư viện tôi đã thấy đều có (yêu cầu 'lib.core) thay vì (yêu cầu' lib).

Tại sao?


Chỉnh sửa: Tôi hơi ngu ngốc. Tín dụng thêm sẽ được đưa ra cho một ví dụ ngắn gọn về cách một không gian tên phân đoạn duy nhất có thể là một điều xấu.

Trả lời

14

Java không khuyến khích sử dụng gói mặc định vì bạn không thể tham chiếu bất kỳ thứ gì trong gói đó từ bất kỳ gói nào khác. Nếu bạn đã biên dịch trước một không gian tên Clojure một đoạn, bạn sẽ nhận được một lớp Java trong gói mặc định. Nếu bất cứ ai bất cứ lúc nào muốn sử dụng thư viện của bạn từ Java, anh ta sẽ bị ngừng lại bởi sự tầm thường này. Vì không có lý do chính đáng nào có lợi cho việc sử dụng không gian tên một đoạn, và có một lý do được xác định rõ ràng này, nên công bằng khi nói rằng các vùng tên phân đoạn đơn lẻ nên là một thực tiễn không được khuyến khích trong Clojure.

+0

ok, doom.clj -> doom.class nhưng (ns horror.doom) trong kinh dị/doom.clj đi đến doom.class trong gói kinh dị? Và tôi phải có kinh dị thư mục con để sử dụng (ns horror.doom)? –

+2

Vâng, đó là quy ước mà Clojure tự động định vị các tệp .clj dựa trên không gian tên. –

6

Các vùng tên phân đoạn duy nhất có vấn đề với tương tác Java. Một số điều có thể phá vỡ theo những cách bất ngờ. Xem thêm https://groups.google.com/forum/?fromgroups=#!topic/clojure/gOffhotk25Y

+0

Tôi đã đọc điều đó và tôi vẫn không chắc chắn điều gì đang xảy ra. Điều tốt nhất tôi có thể dịch nó là 'Có một số java phá thai phá hoại thông qua vào clojure nhưng nó không rõ ràng làm thế nào nó thực sự có thể là xấu.' Dù sao cũng cảm ơn bạn. –

+2

Trong clojure trên JVM, '(ns foo.bar)' kết quả trong * class * bar trong * package * foo, với các hàm được định nghĩa trong thanh như các lớp bên trong của thanh. Điều này có nghĩa là các không gian tên "toplevel" trong clojure thực sự là các lớp "gói-ít", được các JVM và/hoặc Java xử lý đặc biệt (theo một số cách có thể bất ngờ). –

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