Mam def w przestrzeni nazw, które chcę zainicjować raz, gdy aplikacja jest uruchamiana, ale za każdym razem, gdy przestrzeń nazw zawierająca "def" jest "używana" i: ponownie ładowana z innej przestrzeni nazw, "def" jest ponownie obliczana. Jak mogę zapobiec ponownemu sprawdzeniu "def" podczas tego ładowania?Jak mogę uzyskać "def", aby nie ładować ponownie w clojure?
6
A
Odpowiedz
13
defonce
będzie Ci blisko choć nadal będzie ponownie, jeśli jest zdefiniowana przestrzeń nazw: reloaded ponieważ (use 'my.namespace :reload)
najpierw wyrzuca stare wiązania korzeń.
Defonce to makro, które sprawdza, czy var ma już powiązanie root w danej przestrzeni nazw, a następnie definiuje je tylko wtedy, gdy tak nie jest. Możesz tego użyć, aby rozwiązać problem, umieszczając tę specjalną def w swojej własnej przestrzeni nazw za pomocą (in-ns ...)
, aby chronić ją przed zniszczeniem przez ponowne załadowanie. wtedy możesz przeładować "główną" przestrzeń nazw tak często, jak chcesz, a kod powinien być zdefiniowany tylko raz.
1
Powiązane problemy
- 1. Jak mogę uzyskać stos wywołań w Clojure?
- 2. Dlaczego nie ma destructingu w formie def?
- 3. Jak mogę ładować ładunek, aby automatycznie przekompilować zmienione pliki?
- 4. co def def: self.up, def-up, def self.down, def down?
- 5. Aplikacja Clojure Partial - jak uzyskać "mapę", aby zwrócić kolekcję funkcji?
- 6. Definicja funkcji wbudowanych w Clojure: def vs defn
- 7. W clojure, jak mogę uzyskać nazwę bieżącego obszaru nazw?
- 8. Jak mogę zaktualizować element wektorowy w Clojure?
- 9. Czy istnieje sposób, aby programowo uzyskać kolekcję specjalnych formularzy clojure?
- 10. Co oznaczają "def + @" i "def - @"?
- 11. Jak uzyskać znacznik czasu Unix w Clojure?
- 12. Clojure - jak tworzyć formularze def oceniać w czasie wykonywania zamiast kompilacji
- 13. Jak hermetyzować w clojure?
- 14. Jak ładować Ajax w Wordpressie
- 15. Nie mogę uzyskać AVPlayerLayer, aby wyświetlać wideo w NSView
- 16. Jak ponownie użyć metod deftype w Clojure/Clojurescript?
- 17. Clojure: Jak uzyskać meta-dane funkcji?
- 18. Jak mogę ponownie załadować skrypt w IRB?
- 19. Jak ładować wiadomości w RabbitMQ
- 20. Jak mogę rzucić klasę Java w Clojure?
- 21. Jak mogę napisać makro "defn" w Clojure?
- 22. Czy mogę automatycznie ładować pliki funkcji bez klas w PHP?
- 23. Jak mogę rzucić wyjątek w Clojure?
- 24. Zamień * na \ * w Clojure
- 25. Czy mogę wymusić pip, aby ponownie zainstalować obecną wersję?
- 26. Jak uzyskać dostęp do niejawnego "ukrytego", tj. Def a [A: B] lub def a [A <% B]?
- 27. dlaczego "(def samogłoska? (Ustaw" aeiou "))" działa?
- 28. Jak mogę ponownie obliczyć wspólny wykładnik?
- 29. Jak uzyskać zestaw wszystkich liter w Java/Clojure?
- 30. Jak ładować pliki w Mac 10.6?
hej, czy to zachowanie zmieniło się od czasu tej odpowiedzi? Próbowałem dodać (defonce x 5) do przestrzeni nazw, uruchamiając replikę, x to 5, potem zmieniłem je w źródle, próbowałem (wymagają: przeładowanie "testu) i (użyj: przeładuj" test), a x wciąż jest 5 – Hendekagon