Clojure-ウォッチャー
Watchersアトムや参照変数などの変数タイプに追加される関数で、変数タイプの値が変更されたときに呼び出されます。たとえば、呼び出し側プログラムがアトム変数の値を変更し、ウォッチャー関数がアトム変数にアタッチされている場合、アトムの値が変更されるとすぐに関数が呼び出されます。
Clojure for Watchersでは、次の機能を使用できます。
追加-ウォッチ
エージェント/アトム/変数/参照参照に監視関数を追加します。時計‘fn’キー、参照、古い状態、新しい状態の4つの引数の「fn」である必要があります。参照の状態が変更された可能性がある場合は常に、登録された時計の関数が呼び出されます。
構文
構文は次のとおりです。
(add-watch variable :watcher
(fn [key variable-type old-state new-state]))
Parameters−'variable 'は、アトムまたは参照変数の名前です。'variable-type'は、アトムまたは参照変数のいずれかの変数のタイプです。'old-state&new-state'は、変数の新旧の値を自動的に保持するパラメーターです。「キー」は参照ごとに一意である必要があり、remove-watchを使用して時計を削除するために使用できます。
Return Value −なし。
例
これがどのように使用されるかの例は、次のプログラムに示されています。
(ns clojure.examples.example
(:gen-class))
(defn Example []
(def x (atom 0))
(add-watch x :watcher
(fn [key atom old-state new-state]
(println "The value of the atom has been changed")
(println "old-state" old-state)
(println "new-state" new-state)))
(reset! x 2))
(Example)
出力
上記のプログラムは、次の出力を生成します。
The value of the atom has been changed
old-state 0
new-state 2
削除-ウォッチ
参照変数にアタッチされているウォッチを削除します。
構文
構文は次のとおりです。
(remove-watch variable watchname)
Parameters−'variable 'は、アトムまたは参照変数の名前です。「watchname」は、時計機能が定義されたときに時計に付けられる名前です。
Return Value −なし。
例
これがどのように使用されるかの例は、次のプログラムに示されています。
(ns clojure.examples.example
(:gen-class))
(defn Example []
(def x (atom 0))
(add-watch x :watcher
(fn [key atom old-state new-state]
(println "The value of the atom has been changed")
(println "old-state" old-state)
(println "new-state" new-state)))
(reset! x 2)
(remove-watch x :watcher)
(reset! x 4))
(Example)
出力
上記のプログラムは、次の出力を生成します。
The value of the atom has been changed
old-state 0
new-state 2
上記のプログラムから、2番目のリセットコマンドはウォッチャーのリストから削除されたため、ウォッチャーをトリガーしないことがはっきりとわかります。