Clojure でプログラミングするときに、クロージャーの結果であるバインディングを再定義またはオーバーライドできるかどうかに興味がありますか?
たとえば、次のことをうまく実行できます。
(defn triple-adder-fn [a b] (fn [x] (+ x a b)))
(def triple-adder (triple-adder-fn 1 2))
(triple-adder 3)
;; => 6
a = 1
ただし、これにより、 andのバインディングを持つローカル クロージャーが作成され、b = 2
呼び出すtriple-adder
とそれに応じてそれらが使用されます。
ここで問題は、これらのローカル バインディングをオーバーライドできるようにする次のモック コードのようなことを実行できるかどうかです。
(binding ['a 5
'b 6]
(triple-adder 3))
;; => 14
私の単純な例では、 を呼び出してtriple-adder-fn
新しいバインディングを持つ新しい関数を取得するのは非常に簡単です。ただし、私の実際の状況では、実際には制御せずtriple-adder-fn
、結果の関数にしかアクセスできない立場にあります。