Tôi có một def trong một không gian tên mà tôi muốn khởi tạo một lần khi ứng dụng được bắt đầu, nhưng mỗi khi không gian tên chứa "def" được "sử dụng" và: tải lại từ một không gian tên khác thì "def" được đánh giá lại. Làm thế nào tôi có thể ngăn chặn các "def" từ được tái evaulated trong quá trình tải lại này?Làm thế nào tôi có thể nhận được một "def" để không tải lại trong clojure?
6
A
Trả lời
13
defonce
sẽ giúp bạn gần gũi mặc dù nó vẫn sẽ được định nghĩa một lần nữa nếu không gian tên là: reloaded vì (use 'my.namespace :reload)
đầu tiên ném ra gốc rễ cũ ràng buộc.
Defonce là một macro kiểm tra xem var đã có một ràng buộc gốc trong không gian tên đã cho và sau đó chỉ định nghĩa nó nếu nó không có. Bạn có thể sử dụng điều này để giải quyết vấn đề của bạn bằng cách đặt def đặc biệt này vào không gian tên riêng của nó với một (in-ns ...)
để bảo vệ nó khỏi bị xóa sổ bằng cách tải lại. sau đó bạn có thể tải lại không gian tên 'chính' thường xuyên như bạn muốn và mã chỉ nên được xác định một lần.
1
Các vấn đề liên quan
- 1. Xác định lại "def" trong Clojure
- 2. Trong clojure, làm thế nào tôi có thể undef một var từ một không gian tên?
- 3. Làm thế nào tôi có thể nhận được ngăn xếp cuộc gọi trong Clojure?
- 4. Làm thế nào tôi có thể cập nhật một mục vectơ trong Clojure?
- 5. Làm thế nào tôi có thể nhận được một tham chiếu đến một Fragment trong ViewPager?
- 6. let vs def in clojure
- 7. Làm thế nào để tôi lại thụt lề một cách thông minh Clojure trong Emacs?
- 8. Làm thế nào tôi có thể bỏ một lớp Java trong Clojure?
- 9. Trong clojure làm thế nào tôi có thể kiểm tra nếu một biểu tượng đã được xác định?
- 10. Làm thế nào tôi có thể nhận được enum để chứa một dấu gạch ngang (-)?
- 11. webapp2 + jinja2: Làm thế nào tôi có thể nhận được uri_for() làm việc trong jinja2-xem
- 12. Làm thế nào tôi có thể nhận được giá trị thập phân ascii của các ký tự trong Clojure?
- 13. Làm thế nào tôi có thể gọi tái diễn nếu có điều kiện trong Clojure?
- 14. Làm thế nào tôi có thể nhận được một ITextBuffer ra khỏi một EnvDTE.Window?
- 15. Trong Clojure, làm thế nào để xác định một biến được đặt tên bởi một chuỗi?
- 16. Làm thế nào tôi có thể nhận được các phông chữ sẵn có trong WPF
- 17. Làm thế nào tôi có thể nhận được độ dài của một mảng trong awk?
- 18. Làm thế nào tôi có thể nhận được một loại véc tơ trong C#?
- 19. Làm thế nào tôi có thể nhận được System.Net.Http.HttpClient để không theo 302 chuyển hướng?
- 20. Làm thế nào tôi có thể nhận được một băm MD5 trong Coldfusion?
- 21. Ruby - Làm thế nào tôi có thể nhận được tên phương thức trong chính nó?
- 22. Làm thế nào tôi có thể nhận được một mảng lười biếng trong Ruby?
- 23. Làm thế nào tôi có thể nhận được của Python unittest để không bắt ngoại lệ?
- 24. Làm thế nào tôi có thể nhận được kích thước của một đối tượng trong HttpRuntime.Cache?
- 25. Tôi làm cách nào để sử dụng Zip trong Clojure?
- 26. Làm thế nào tôi có thể nhận được các bit từ một chuỗi trong C#?
- 27. Không thể tải clojure-contrib để tải - FileNotFoundException
- 28. Làm thế nào tôi có thể nhận được Emacs để thụt lề // nhận xét của tôi với mã của tôi?
- 29. Làm thế nào tôi có thể nhận được thời gian của âm thanh được ghi lại trong iphone?
- 30. Khi tôi chia số trong clojure tôi nhận được một phần nhỏ, làm thế nào để có được số thập phân?
này, hành vi này có thay đổi kể từ câu trả lời này không? Tôi đã thử thêm một (defonce x 5) vào namespace, bắt đầu repl, x là 5, sau đó tôi thay đổi nó trong nguồn, thử (yêu cầu: tải lại 'test) và (use: reload' test) và x vẫn là 5 – Hendekagon