原子があった場合:
(def a (atom {}))
以下の時計セットで
(add-watch a :watcher println)
(add-watch a :watcher2 println)
このような機能はありますか?
(get-watches a)
;; => [:watcher :watcher2]
原子があった場合:
(def a (atom {}))
以下の時計セットで
(add-watch a :watcher println)
(add-watch a :watcher2 println)
このような機能はありますか?
(get-watches a)
;; => [:watcher :watcher2]
(atom {})
clojure.lang.IRefインターフェースを実装するclojure.lang.Atom
抽象クラスclojure.lang.ARefを拡張するタイプのオブジェクトを作成します。IRefは、 ARefに実装されているメソッドgetWatchesを宣言します。
解決策は次のとおりです。
(def a (atom {}))
(add-watch a :watcher println)
(println (-> a .getWatches keys))
clojure.core
がないのは不思議ですget-watches
。ミラーリングのadd-watch
実装は次のとおりです。
(defn get-watches
"Returns list of keys corresponding to watchers of the reference."
[^clojure.lang.IRef reference]
(keys (.getWatches reference)))
Ivanの答えは、JVM上のClojureに最適です。ClojureScriptでこれを行う方法は次のとおりです。
(keys (.-watches a))
(:watches (bean a))
また
(keys (:watches (bean a)))