0

clojure の変数にウォッチを追加して再バインドすると、ウォッチが動的に更新されます。

(def x "jlkfds")
x

上記の例では、x は常にその値を反映します。

ただし、アトムを使用してこれを実行しようとすると、うまくいきません。変更を instarepl または watch に反映させるには、すべてをもう一度実行する必要があります。

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

上記の例では、deref を実行せずにスワップを実行したため、同期が取れなくなりました。

私を混乱させているのは、誰か (Chris) がマウスポインタの座標が動的に変化するのを見ることができた Javascript のデモを見たことです。私はこの機能を持つという考えが本当に好きです。Clojure で同じことを行う方法はありますか?

このような?

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

ありがとうございました

4

1 に答える 1

1

ウォッチは、監視しているものが評価されたときにのみ更新されます。ウォッチマクロを評価できる場所を見ていることを確認してください。これを試して。

(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 に答える