2012-10-10 20 views

Respuesta

10

(atom {}) crea un objeto de tipo clojure.lang.Atom que se extiende clase abstracta clojure.lang.ARef que implementa clojure.lang.IRef interfaz. IRef declara el método getWatches que se implementa en ARef.

Aquí está la solución:

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

es extraño que clojure.core no tiene get-watches. Mirroring add-watch aplicación obtenemos:

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

o

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

respuesta de Ivan es ideal para Clojure en la JVM. He aquí cómo lo haces en ClojureScript:

(keys (.-watches a))

Cuestiones relacionadas