7

ClojureScriptでイベントをモデル化する方法を理解しようとしています。JavaScriptでイベントキューを設計するのは簡単です。関数の(可変)配列を保持し、配列からコールバックを追加または削除するためのヘルパー関数を提供するだけです。イベントをトリガーするときは、配列にリストされているすべてのコールバックを調べて、それらを次々に呼び出します。

このパラダイムは機能的なスタイルとはほど遠いものです。たとえば、副作用がない限り、コールバックをトリガーしても意味がありません。さらに、可変配列を使用して実装されます。それでも、ClojureScriptでは、有用なことを行うためにイベント駆動型プログラミングを実行できる必要があるように思われます。今、私はGoogle Closureがすでにイベントライブラリを実装していることを知っていますが、私の質問はそれをネイティブに実装することについてです。

すべての基本的なClojure/ClojureScriptデータ型は不変であるため、このメカニズムを実装するための慣用的な方法は何でしょうか。参照を変更しますか?ホストからの可変データ構造(JavaまたはJavaScript)に頼っていますか?

私が正しく理解していれば、エージェントはおそらくClojureの適切なツールですが、現在、ClojureScriptには実装されていないようです。

4

3 に答える 3

5

Clojurescript Oneにはライブラリがあり、one.dispatchこれは良い出発点です。wikiにはここに使用例があります

于 2012-04-02T05:40:50.817 に答える
2

2013年の時点で、clojureでイベント処理を実現するための最良の方法は、優れたcore.asyncライブラリです。

core.async言語と非常によく似た方法で、チャネルを使用したイベント駆動型プログラミングを可能にしますGo

于 2014-04-02T00:32:53.873 に答える
1

実行時にものを保存/削除するストアが必要な状況で、ほとんどのclojureライブラリなどが行うようなソリューションを実装する場合は、ref/atomを変更することで問題ありません。

于 2012-04-02T04:45:30.053 に答える