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番目のリセットコマンドはウォッチャーのリストから削除されたため、ウォッチャーをトリガーしないことがはっきりとわかります。