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. Clojureのseqとシーケンスの違いは何ですか?
- 5. Clojureのdefとdefonceの違いは何ですか?
- 6. Lisp/Clojureのプロシージャと# 'プロシージャの違いは何ですか?
- 7. Clojure STMとHaskell STMの違いは何ですか?
- 8. Clojureでwith-redefsとwith-redefs-fnの違いは何ですか?
- 9. Clojure:[Dと[Ljava.lang.Double;の違いは何ですか?
- 10. NumPyとClojure/Javaの間の浮動小数点数の相違
- 11. Clojureのドット演算子と完全修飾呼出しの違い
- 12. Clojureの読み込み文字列と読み込み文字列の違い
- 13. トークンとClojureの
- 14. Clojure: 'assert'の引数が間違っていますか?
- 15. Clojureでは、関数、引用された関数とシャープクォート関数の違い
- 16. ClojureとLispの構文に大きな違いがありますか
- 17. ClojureとClojureによる再帰と勇気のための
- 18. JLabelのアイコンClojureの上でまだのClojureとmiglayout
- 19. ClojureクラスからのClojure ISeq
- 20. Clojureのfoo、:: foo、:: bar/foo、および:bar/fooの違いは何ですか?
- 21. のClojure:ブレイブと真のためにはClojureで
- 22. Clojureのは、やると再発形式のClojureに
- 23. JavaからClojureを呼び出すときのスコープClojureのスコープ
- 24. Clojureでは、lazy seqを他の型に変換するためのapplyとintoの違いは何ですか? Clojureので
- 25. なぜですか:他にはいない(else)clojure? Clojureので
- 26. Clojure - 間違った数の引数が渡されました
- 27. clojureとscala interop
- 28. ClojureとWebSocket
- 29. Clojureフィンガーツリーとflexvec
- 30. Clojureのマップと等価性
あなたの質問に「ダイナミックバインディング」が正しく使用されていないと思います – Chiron