Ich habe ein Def in einem Namespace, den ich einmal beim Start der Anwendung initialisieren möchte, aber jedes Mal, wenn der Namespace, der das "def" enthält, "verwendet" und: von einem anderen Namespace neu geladen wird, wird das "def" neu ausgewertet. Wie kann ich verhindern, dass das "def" während dieses Nachladens erneut ausgewertet wird?Wie kann ich ein "def" bekommen, um nicht in clojure neu zu laden?
6
A
Antwort
13
defonce
werden Sie in der Nähe bekommen, obwohl es noch einmal definiert werden, wenn der Namespace ist: neu geladen, weil (use 'my.namespace :reload)
erste Bindung der alte Wurzel wirft.
Defonce ist ein Makro, das prüft, ob die Variable bereits eine Root-Bindung im angegebenen Namespace hat und diese nur dann definiert, wenn dies nicht der Fall ist. Sie können dies verwenden, um Ihr Problem zu lösen, indem Sie dieses spezielle def in einen eigenen Namespace mit einer (in-ns ...)
setzen, um es davor zu schützen, durch ein Nachladen ausgelöscht zu werden. Anschließend können Sie den Namespace "Haupt" beliebig oft neu laden und der Code sollte nur einmal definiert werden.
1
Verwandte Themen
- 1. Wie kann ich ein clojure "def" bekommen, um es neu zu bewerten, ohne: reload?
- 2. Ich kann clojure-contrib nicht laden - FileNotFoundException
- 3. Neudefinition von "def" in Clojure
- 4. Clojure-Code in Tomcat neu laden
- 5. let vs def in clojure
- 6. Kann ich Javascript Ressource bekommen, um eine andere zu laden?
- 7. Wie kann ich ein Skript in IRB neu laden?
- 8. Wie erzwinge ich ActiveRecord, um eine Klasse neu zu laden?
- 9. Wie bekomme ich Chrome, um Quellkarten neu zu laden?
- 10. Wie erzwinge ein WebImageView neu zu laden?
- 11. ROR: Wie kann ich die Parameter vom Controller bekommen, ohne den Browser neu zu laden?
- 12. Wie neu zu laden UIViewController
- 13. Wie kann ich Rails zwingen, application.js neu zu laden?
- 14. Wie kann ich mySQL löschen, um neu zu starten? (OSX)
- 15. Wie kann ich eine vertikale Liste bekommen, um PDFs in einen iFrame zu laden?
- 16. Wie ein PHP-Datenbankabfrage zwingen, alle 5s neu zu laden, ohne Seite neu zu laden
- 17. Wie erzwinge Meteor, um Abonnements neu zu laden?
- 18. RxSwift: Wie benutze ich shareReplay um ein Abonnement zu bekommen
- 19. Wie kann ich ein Vektorelement in Clojure aktualisieren?
- 20. Ein Fragment-Status neu laden
- 21. Wie füge ich einer Sequenz, die über def in Clojure definiert wurde, einen Meta/Kommentar hinzu?
- 22. Wie kann man Strukturen in einer Datei speichern, um sie einfach neu laden zu können?
- 23. Wie kann ich ein Makro in Clojure abbilden?
- 24. Wie vim pathogen machen, um Plugins neu zu laden?
- 25. Wie bekomme ich einen Prozess, um sich in Linux neu zu laden?
- 26. Kann ich SwiftyJSON benutzen, um Fehler in Siesta zu bekommen?
- 27. Wie neu gespeicherte "Embed Source" Zwischenablage Daten neu zu laden?
- 28. Clojure: Wie kann ich ein Objekt aus dem Speicher entfernen?
- 29. Clojure Uberjar nicht laden Ressource-Datei
- 30. Wie kann ich automatisch Aufgabenmodule mit Sellerie-Daemon neu laden?
hey, hat sich dieses Verhalten seit dieser Antwort geändert? Ich habe versucht, ein (defonce x 5) zu einem Namespace hinzufügen, ein repl starten, x ist 5, dann habe ich es in der Quelle geändert, versucht (erfordern: Test neu laden) und (verwenden: reload 'Test) und noch x ist immer noch 5 – Hendekagon