2010-11-17 5 views
23

Trong clojure tôi có những dòng như thế này mà xác định giá trị mặc định:Trong clojure, làm thế nào tôi có thể undef một var từ một không gian tên?

(def *http-port* 8080) 

bây giờ tôi đã quyết định để chính thức hóa các loại giá trị vào một đơn vị cấu hình và tôi muốn undefine giá trị *http-port* vì vậy mà tôi có thể tìm thấy các vị trí vẫn tham chiếu đến giá trị này và thay đổi chúng để sử dụng giá trị mới. Tôi đang thực hiện tái cấu trúc nói cách khác bằng cách di chuyển giá trị đến một vị trí khác.

Cách tôi đã làm điều này là bỏ chất nhờn và cố gắng khởi động lại phiên chất nhờn. Trong các giai đoạn biên dịch của maven như thế này được chọn và tôi có thể tìm và sửa một tham chiếu tại một thời điểm. Sau đó tôi sửa lỗi, rửa sạch và lặp lại. Điều này rõ ràng là bực bội.

Tôi sẽ làm điều này khi kết nối với phiên chất nhờn như thế nào?

Trả lời

33

Nếu tôi hiểu bạn một cách chính xác, ns-unmap nên làm những gì bạn muốn:

user=> foo 
java.lang.Exception: Unable to resolve symbol: foo in this context (NO_SOURCE_FILE:1) 
user=> (def foo 1) 
#'user/foo 
user=> foo 
1 
user=> (ns-unmap (find-ns 'user) 'foo) 
nil 
user=> foo 
java.lang.Exception: Unable to resolve symbol: foo in this context (NO_SOURCE_FILE:1) 
+7

không gian tên khác có thể vẫn giữ tham chiếu đến giá trị của 'foo. –

+2

@Jurgen điều này là đúng, nhưng giải pháp là tốt hơn so với không có gì –

+0

Chỉ cần nhớ: không gian tên mặc định là 'clojure.core –