LightTable Clojure手表未在Atom上更新



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

(def x "jlkfds")
x

在上述示例中,x将始终反映其值。

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

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

在上面的例子中,我在没有执行deref的情况下执行了交换,因此它们变得不同步。

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

像这样?

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

感谢

只有当手表正在观看的东西是eval'd时,手表才会更新。只要确保你在某个可以评估手表宏的地方观看。试试这个。

(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的值。

最新更新