in-ns
là một trong những cách phù hợp.
Cách cảm nhận "quyền" nhất đối với tôi là (require '[example.code :as ec])
và hoạt động trong không gian tên user
tại REPL; theo cách đó, trạng thái thử nghiệm ném của tôi vẫn nằm trong các số user
và ec/foo
đủ thuận tiện cho tôi (và điều này rõ ràng là nơi mà foo
được cho là bắt nguồn từ). Bạn luôn có thể nói (require :reload-all 'example.code)
(cùng một công trình với use
) để buộc biên dịch lại.
Ngoài ra, đây là một chức năng để loại bỏ (từ không gian tên hiện tại) tất cả các ánh xạ kéo từ một không gian tên được đưa ra với use
:
(defn unuse [ns]
(doseq [[n v] (ns-refers *ns*)]
(if (= (.. v ns name) ns)
(ns-unmap *ns* n))))
Ngày đầu đó bạn có thể xây dựng
(defn reuse [ns]
(unuse ns)
(remove-ns ns)
(use :reload-all ns))
và hãy nói (reuse 'example.code)
để có được một thứ gần gũi với một khởi đầu mới với không gian tên của bạn. (Lưu ý rằng 1,2 tính năng mới như deftype
& defrecord
giới thiệu một số phức tạp ... Đặc biệt, unuse
không ảnh hưởng đến lớp import
ed -. Điều này bao gồm hồ sơ và deftype
loại -created :reload-all
vẫn làm cho deftype
et al hình thức được. biên dịch lại, nhưng tôi nhớ đã đánh những trường hợp kỳ lạ mà điều này dường như không đủ ... Có thể lỗi của tôi, có thể là một số khía cạnh phức tạp của những tính năng này mà tôi chưa khám phá đầy đủ.)
Nguồn
2010-07-13 11:33:00
Cũng trong ns là "Right Way" để chuyển đổi không gian tên, không phải ns. ns là nghĩa vụ phải được gọi chỉ một lần để thiết lập không gian tên với tất cả các yêu cầu của nó, sử dụng và nhập khẩu. Khi điều này được thực hiện, in-ns được sử dụng để chuyển đổi không gian tên. – kotarak
bạn là đúng, tôi bỏ lỡ các in-ns, phù hợp hơn cho repl – jneira