Clojure-watchers

提供:Dev Guides
移動先:案内検索

Clojure-ウォッチャー

*Watchers* は、変数タイプの値が変更されたときに呼び出されるアトムや参照変数などの変数タイプに追加される関数です。 たとえば、呼び出し側プログラムがアトム変数の値を変更し、ウォッチャー関数がアトム変数に関連付けられている場合、アトムの値が変更されるとすぐに関数が呼び出されます。

Clojure for Watchersでは、次の機能を使用できます。

ウォッチを追加

監視機能をagent/atom/var/ref参照に追加します。 時計 'fn' は、4つの引数の 'fn’でなければなりません:キー、参照、その古い状態、新しい状態。 参照の状態が変更された可能性があるときはいつでも、登録されているすべてのウォッチに関数が呼び出されます。

構文

構文は次のとおりです。

(add-watch variable :watcher
   (fn [key variable-type old-state new-state]))

パラメータ-「変数」はアトムまたは参照変数の名前です。 「変数タイプ」は、原子または参照変数の変数タイプです。 「古い状態と新しい状態」は、変数の古い値と新しい値を自動的に保持するパラメーターです。 「キー」は参照ごとに一意である必要があり、remove-watchで時計を削除するために使用できます。

戻り値-なし。

これがどのように使用されるかの例は、次のプログラムに示されています。

(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)

パラメータ-「変数」はアトムまたは参照変数の名前です。 「ウォッチ名」は、ウォッチ機能が定義されているときにウォッチに付けられる名前です。

戻り値-なし。

これがどのように使用されるかの例は、次のプログラムに示されています。

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