binding
フォームでは、クロージャーで再バインド可能な動的スコープが可能であることを理解しています。これまで使用してきた唯一の用途は、print
などのI/Oの場合です。*out*
は、当時のライターにリバウンドしています。clojureにバインディングを使用する良い例は何ですか?
本当に他の施設が実際には機能しないbinding
の力を活用した例を見たいと思います。私が個人的に使用したのは、ユーザーが提供したオブジェクトをすべての関数に渡すことが面倒だった場合のみです。基本的には、ヘルパー関数が使用するコンテキストを作成しようとしています。 (このケースに似てWhen should one use the temporarily-rebind-a-special-var idiom in Clojure?)具体的には、データベース機能が何を操作するのかを知るために、ユーザに*db*
varへの動的バインディングを作成することを依頼していました。これは、ユーザーが多数のネストされた呼び出しをデータベース関数に書き込む必要がある場合に特に便利でした。一般的には、自分で簡単にマクロを作成する必要がある場合は、大丈夫ですが、そうするようにユーザーに要求することは悪いようです。それは言われているように、私は可能な限りそうすることを避けようとしています。
私がコピーして自分のコードに組み込むことができる「バインディング」の他の良い使用例は何ですか?
これまでのすべての良い答え。他の誰かが刺すことを望む場合には、答えを選択する前に、多分数日前にそれを残しておきます。 – bmillare