添加监视功能中的键参数是什么意思



我的问题是,使用提供的文档和示例,我无法理解:key参数的含义或其可能的值这是我所指函数的官方文档页面:
http://clojuredocs.org/clojure_core/clojure.core/add-watch

添加watchclojure.core

(add-watch reference key fn)  

将监视函数添加到代理/atom/var/ref引用中。手表fn必须是4个参数的fn:键、引用、旧状态、新状态。每当引用的状态可能发生更改时注册手表的功能将被调用。手表fn将如果是代理,则在代理的线程上同步调用挂起发送if agent或ref。注意原子或ref的状态可能在fn调用之前再次更改,因此请使用旧/新状态而不是取消引用。还要注意的是,可以调用watch-fns同时从多个线程。Var观察者仅被触发通过根绑定更改,而不是线程本地设置!s.密钥必须是唯一的每个参考并且可以用于移除带有移除手表的手表,但是在其它方面被钟表机构认为是不透明的。

感谢

它基本上只是一个标识符,您可以在调用代码时使用它来识别手表,以防每个引用有多个手表。它应该对您的应用程序代码具有重要意义,但将由Clojure传递。

例如:

user> (def a (atom 0))
#'user/a
user> (add-watch a
                 :count-to-3
                 (fn [k r old-state new-state]
                     (println "changed from" old-state "to" new-state)
                     (when (>= new-state 3)
                       (remove-watch a :count-to-3))))
#<Atom@3287a10: 0>
user> (dotimes [_ 5] (swap! a inc))
changed from 0 to 1
changed from 1 to 2
changed from 2 to 3
nil
user> @a
5

答案就在那里:

每个引用的密钥必须是唯一的,并且可以用于删除带有remove手表的手表,但在其他方面被视为不透明手表机构。

换句话说,实际的监视机制并不关心您将密钥设置为什么(只要它在给定ref上设置的处理程序中是唯一的),但如果您想调用remove-watch来摆脱处理程序

,则需要保留它

最新更新