2012-04-01 14 views
7

ClojureScriptでイベントをモデル化する方法を理解しようとしています。 JavaScriptでイベントキューを設計するのは簡単です。関数の(変更可能な)配列を保持し、配列からのコールバックを追加または削除するヘルパー関数を提供します。イベントをトリガするときは、配列にリストされているすべてのコールバックを1つずつ呼び出すだけです。Clojure/ClojureScriptでのイベント駆動型プログラミングの扱い

このパラダイムは、機能的なスタイルとはかけ離れています。たとえば、副作用がない限り、コールバックを開始する点はありません。さらに、可変配列を使用して実装されています。それでも、ClojureScriptでは、何か便利なことをするイベントドリブンプログラミングを行う必要があるように思えます。今、私はGoogle Closureが既にイベントライブラリを実装していることを知っていますが、私の質問はそれをネイティブに実装することです。

基本的なClojure/ClojureScriptのデータ型はすべて不変であるため、このメカニズムを実装するための慣習的な方法は何でしょうか? refを変更しますか?ホストからの変更可能なデータ構造へのアクセス(Java resp JavaScript)?

私が正しく理解していれば、エージェントはClojureの正しいツールかもしれませんが、ClojureScriptには現在実装されていません。

答えて

5

Clojurescript Oneは、ライブラリー「one.dispatch」があり、これは良い開始点です。

core.asyncはチャンネルのイベント駆動型のプログラミングを可能にします:Wikiは使用例here 2013のよう

+0

そして、同じ概念のアトムを使ってすべてのイベントハンドラを保存します – Ankur

+0

404が見つかりませんでした - それが別の場所に移動されていれば分かりますか? –

1

実行時にストアを格納/削除するような状況が発生した場合など、ほとんどのclojureライブラリなどのようなソリューションを実装したい場合は、ref/atomを変更すると問題ありません。

2

、Clojureの中で優れたcore.asyncライブラリをされたイベント処理を実現するための最良の方法を持っていますGoと非常によく似た方法で

関連する問題