当我将手表添加到clojure中的变量并重新绑定时,手表会动态更新。
(def x "jlkfds")
x
在上面的示例中,x将始终反映其值。
然而,当我尝试使用原子做这件事时,我没有运气。我必须再次执行整个过程以使更改反映在instarepl或watch中。
(defonce y (atom 10))
@y *38*
(swap! y inc) *80*
在上面的例子中,我执行了交换而没有执行deref,因此它们变得不同步。
让我感到困惑的是,我看到了一个Javascript演示,其中有人(Chris)能够看到鼠标指针的坐标动态变化。我非常喜欢拥有此功能的想法。有没有办法在Clojure中做同样的事情?
喜欢这个吗?
http://youtube.com/watch?v=d8-b6QEN-rk
谢谢
答案 0 :(得分:0)
只有当他们正在观看的东西被评估时才会更新手表。只需确保您正在观看手表宏可以评估的某个地方。试试这个。
(defonce y (atom 10))
(do //Eval this sexp
(swap! y inc)
@y) //watch this j
我认为你也遇到了insta-repl(实时模式)的问题,它会定期评估整个页面,这就是你看到手表不同步的地方。例如,评估第1行并创建原子。您将手表添加到第2行,进行评估。你用第3行增加手表28次,然后做一些强迫第2行再次使用eval的东西。这会将手表更新为y的新值。重新评估第3行不会改变第2行的监视,但会改变y的值。