LightTable Clojure手表未在Atom上更新

LightTable Clojure手表未在Atom上更新,clojure,lighttable,Clojure,Lighttable,在clojure中将手表添加到变量并重新绑定时,手表会动态更新 (def x "jlkfds") x 在上面的示例中,x将始终反映其值 然而,当我试图用原子来做这件事时,我没有运气。我必须再次执行整个过程,以使更改反映在instarepl或手表中 (defonce y (atom 10)) @y *38* (swap! y inc) *80* 在上面的例子中,我执行了交换而没有执行deref,因此它们变得不同步 让我困惑的是,我看到了一个Javascript演示,其中有人(Chris)能够看

在clojure中将手表添加到变量并重新绑定时,手表会动态更新

(def x "jlkfds")
x
在上面的示例中,x将始终反映其值

然而,当我试图用原子来做这件事时,我没有运气。我必须再次执行整个过程,以使更改反映在instarepl或手表中

(defonce y (atom 10))
@y *38*
(swap! y inc) *80*
在上面的例子中,我执行了交换而没有执行deref,因此它们变得不同步

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

像这样


谢谢

手表只有在其正在观看的内容被评估时才会更新。只要确保您正在观看可以评估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的值

我完全明白你的意思,手表只有在它们正在观看的东西被评估时才会更新,但我想在clojure中看到这样的东西:@rhlvora,…你可能会觉得有趣。@rhlvora Light table确实给了你这个。在该视频中,编辑器底部的事件侦听器正在调用
foo
函数。要在纯Clojure中执行类似操作,您需要某种鼠标移动侦听器来连续调用设置监视值的函数。