Dokumentacja Clojure with-local-vars
i with-bindings
nie wystarczy mi do rozróżnienia tych dwóch. Jakieś wskazówki?Różnica między z lokalnym-vars i z powiązaniami w Clojure
Odpowiedz
Nowe var
s są tymczasowo tworzone przez with-local-vars
. Istniejące var
s są tymczasowo odbijane ponownie przez with-bindings
. W obu przypadkach powiązania są wątkowo-lokalne.
Należy zauważyć, że with-bindings
jest, o ile wiem, przede wszystkim przydatny jako pomocnik do przekazywania wiązań z innego kontekstu przy użyciu mapy zwróconej przez get-thread-bindings
. Podobna funkcja, binding
, byłaby bardziej typowa, gdyby nie importować powiązań.
Przykłady:
(binding [*out* (new java.io.StringWriter)]
(print "world!") (str "hello, " *out*))
;=> "hello, world!"
(with-local-vars [*out* (new java.io.StringWriter)]
(print "world!") (str "hello," *out*))
;=> world!"hello,#<Var: --unnamed-->"
(with-local-vars [foo (new java.io.StringWriter)]
(.write @foo "world") (str "hello, " @foo))
;=> "hello, world"
(binding [foo (new java.io.StringWriter)]
(.write @foo "world") (str "hello, " @foo))
;=> CompilerException java.lang.RuntimeException:
; Unable to resolve var: foo in this context...
(z-wiązanie) oczekuje klucze wiązania mapa do Vars nie symbole. Przekazuje podaną mapę var/values na stos powiązań lokalnych wątków i dba o to, aby usunął ją po zwróceniu danej funkcji. Jest to funkcja niskiego poziomu.
(with-local-vars) umożliwia kodowanie w trybie rozkazującym (stan mutacji).
- 1. Różnica między clojure a clojurescript?
- 2. Różnica między definicją a defprotocol w Clojure
- 3. Jaka jest różnica między procedurą i procedurą # 'w Lisp/Clojure?
- 4. Różnica między makrami strzałki i podwójnej strzałki w Clojure
- 5. Jaka jest różnica między "() i (list) w Clojure?
- 6. Jaka jest różnica między Clojure REPL i Scala REPL?
- 7. Clojure - różnica między "(apostrof) a" (backtick)
- 8. Różnica między Scala REPL i Clojure REPL - kompilacja prędkość
- 9. Szablony javascript z powiązaniami danych
- 10. Jaka jest różnica między funkcjami "wyślij" i "wyślij" Clojure w związku z wysyłaniem akcji do agenta?
- 11. std :: ignore z powiązaniami strukturalnymi?
- 12. Różnica między operatorem kropki a pełnoprawnym nazwanym wywołaniem w Clojure
- 13. Różnice między Protokołami Clojure i Groovy Kategorie
- 14. Różnica między $ @ i $! w perl
- 15. Różnica między "i" w Lua
- 16. MySQL: Różnica między ",", "i"
- 17. Różnica między ciągiem odczytywanie a ciągiem znaków w Clojure
- 18. Różnica między | = i^= css
- 19. Różnica między unwrapObservable i()
- 20. Różnica między (++ i) oraz (i ++)
- 21. Różnica między [] i {{}} w celu powiązania stanu z własnością?
- 22. ActiveAdmin sposób sortowania kolumny z powiązaniami
- 23. sqlalchemy: wykonywanie surowego sql z powiązaniami parametrów
- 24. Composer.phar różnica między | i ||
- 25. Jaka jest różnica między fn i fn *?
- 26. Różnica między "% ~ dp0" i ". \"?
- 27. Różnica między ". +" I ". +?"
- 28. Różnica między "**/* /" i "** /"?
- 29. Różnica w zachowaniu conj na wektorach i listach w Clojure
- 30. Różnica między $ .getScript() i $ .get()
Nie uważam, że "powiązanie dynamiczne" jest używane poprawnie dla twojego pytania – Chiron