0

当我将手表添加到 clojure 中的变量并重新绑定它时,手表会动态更新。

(def x "jlkfds")
x

在上面的例子中,x 总是反映它的值。

但是,当我尝试使用原子执行此操作时,我没有运气。我必须再次执行整个操作以使更改反映在 instarepl 或手表中。

(defonce y (atom 10))
@y *38*
(swap! y inc) *80*

在上面的示例中,我执行了交换而不执行 deref,因此它们变得不同步。

让我感到困惑的是,我看到了一个 Javascript 演示,其中有人(克里斯)能够看到鼠标指针的坐标动态变化。我真的很喜欢拥有这个功能的想法。有没有办法在 Clojure 中做同样的事情?

像这样?

http://youtube.com/watch?v=d8-b6QEN-rk

谢谢

4

1 回答 1

1

只有当他们正在观看的东西被评估时,手表才会更新。只需确保您正在观看可以评估 watch 宏的某个地方。尝试这个。

(defonce y (atom 10))

(do //Eval this sexp
  (swap! y inc)
    @y) //watch this j

我认为您也遇到了 insta-repl(实时模式)的问题,它会定期评估整个页面,这就是您看到手表不同步的地方。例如,评估第 1 行并创建原子。您将手表添加到第 2 行,并对其进行评估。您将第 3 行的手表增加 28 次,然后执行一些强制第 2 行再次评估的操作。这会将手表更新为 y 的新值。重新评估第 3 行不会更改第 2 行的手表,但会更改 y 的值。

于 2014-10-24T04:02:06.347 回答