ClojureScriptでイベントをモデル化する方法を理解しようとしています。JavaScriptでイベントキューを設計するのは簡単です。関数の(可変)配列を保持し、配列からコールバックを追加または削除するためのヘルパー関数を提供するだけです。イベントをトリガーするときは、配列にリストされているすべてのコールバックを調べて、それらを次々に呼び出します。
このパラダイムは機能的なスタイルとはほど遠いものです。たとえば、副作用がない限り、コールバックをトリガーしても意味がありません。さらに、可変配列を使用して実装されます。それでも、ClojureScriptでは、有用なことを行うためにイベント駆動型プログラミングを実行できる必要があるように思われます。今、私はGoogle Closureがすでにイベントライブラリを実装していることを知っていますが、私の質問はそれをネイティブに実装することについてです。
すべての基本的なClojure/ClojureScriptデータ型は不変であるため、このメカニズムを実装するための慣用的な方法は何でしょうか。参照を変更しますか?ホストからの可変データ構造(JavaまたはJavaScript)に頼っていますか?
私が正しく理解していれば、エージェントはおそらくClojureの適切なツールですが、現在、ClojureScriptには実装されていないようです。