2012-10-10 6 views

答えて

10

(atom {})clojure.lang.IRefインタフェースを実装する抽象クラスclojure.lang.ARefを拡張タイプclojure.lang.Atomのオブジェクトを作成します。 IRefはARefに実装されたgetWatchesメソッドを宣言します。

(def a (atom {})) 
(add-watch a :watcher println) 
(println (-> a .getWatches keys)) 

clojure.coreget-watchesを持っていないという奇妙です:

はここソリューションです。 add-watch実装をミラーリング我々が得る:

(defn get-watches 
    "Returns list of keys corresponding to watchers of the reference." 
    [^clojure.lang.IRef reference] 
    (keys (.getWatches reference))) 
2
(:watches (bean a)) 

または

(keys (:watches (bean a))) 
2

イワンの答えは、JVM上でClojureのための素晴らしいです。これはClojureScriptでの操作方法です:

(keys (.-watches a))

関連する問題