Clojure with-local-vars
とwith-bindings
のドキュメントでは、2つを区別するのに十分ではありません。何かヒント?Clojureのwith-local-varsとwith-bindingsの違い
8
A
答えて
10
新しいvar
は、with-local-vars
によって一時的に作成されます。既存のvar
は一時的にwith-bindings
によってリバウンドされます。どちらの場合も、バインディングはスレッドローカルです。
with-bindings
は、get-thread-bindings
によって返されたマップを使用して、別のコンテキストからバインディングを渡すヘルパーとして主に役立つことに注意してください。バインディングをインポートしないときは、同様の関数binding
がより一般的です。
実例:
(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...
2
(バインディング-有する)バインディングマップのキーはバール、ではないシンボルことを期待。指定されたvar/valuesのマップをスレッドローカルバインディングのスタックにプッシュし、与えられた関数が返された後にそれを削除するように注意してください。 低レベルの関数です。
(with-local-vars)を使用すると、命令的なスタイル(変更状態)でコードすることができます。
関連する問題
- 1. Clojure - '(アポストロフィ)と `(バックティック)の違い
- 2. ClojureのIFnとFnの相違
- 3. ClojureプロトコルとGroovyカテゴリの相違点
- 4. Lisp/Clojureのプロシージャと# 'プロシージャの違いは何ですか?
- 5. Clojure:[Dと[Ljava.lang.Double;の違いは何ですか?
- 6. Clojure STMとHaskell STMの違いは何ですか?
- 7. NumPyとClojure/Javaの間の浮動小数点数の相違
- 8. Clojureのドット演算子と完全修飾呼出しの違い
- 9. Clojureの読み込み文字列と読み込み文字列の違い
- 10. トークンとClojureの
- 11. Clojure: 'assert'の引数が間違っていますか?
- 12. ClojureとLispの構文に大きな違いがありますか
- 13. Clojureでは、関数、引用された関数とシャープクォート関数の違い
- 14. JLabelのアイコンClojureの上でまだのClojureとmiglayout
- 15. ClojureクラスからのClojure ISeq
- 16. なぜですか:他にはいない(else)clojure? Clojureので
- 17. RejectedExecutionExceptionとClojureの並行性
- 18. Clojureのマップと等価性
- 19. レース条件とClojureのアトム
- 20. clojureとscala interop
- 21. Clojureフィンガーツリーとflexvec
- 22. 違いダウンケースとダウンケースの違い! Rubyで
- 23. Clojure関数に渡された引数の数が間違っています
- 24. Open GL ES - GLenumとGlintの違いとGLintとGLsizeiの違い
- 25. のClojureの喜びでClojureの
- 26. clojureの弱い参照
- 27. Clojureのdefrecord - 使い方は?
- 28. Clojureの
- 29. Clojureの
- 30. Clojureの
あなたの質問に「ダイナミックバインディング」が正しく使用されていないと思います – Chiron