2012-04-07 8 views

答えて

6

これは、の動的イベント切り替えです。残念なことに、その処方では、それはmany problemsであり、反応性バナナには含まれていません。ただし、動的イベント切り替えの変形はadded soonになります。今のところ、あなたはそれなくしなければならないでしょう。

特に、flatMapは、モナド結合関数のScalaの名前です。動作のためのMonadインスタンスは、リンクされた記事で説明した時間リークにつながる動的イベント切り替え機能を提供するため、問題があります。

+0

リンクをありがとう、私は私が必要としていたものだと思う。私は注意深くそれらを読むでしょう。 –

+0

Btwでは、EventSourceにはバインドメソッドがありますが、純粋なメソッドがないため、MonadまたはApplicativeにすることはできません。一方、SignalはMonadとApplicativeのような純粋な関数を持っていますが、Monadのプロパティに従っているかどうかは決して確認しません。反応的なバナナの行動はモナドではない、何が欠けているのだろうか。 –

+2

さて、何も見当たりません。意図的に省略されているのは、時間のリークを引き起こし、意味的に問題があるためです。それはある意味では「間違った型」を持っています(右の型はリンク先の2番目の記事に与えられています)。 – ehird

3

ehirdの回答の補足として、ダイナミックなイベントの切り替え、つまり関連するビヘイビアー/イベントがコンパイル時に有効であることを避けることができます。動的イベントの切り替えは、スコープ内にあるビヘイビア/イベントを切り替えるときではなく、新しいビヘイビア/イベントをオンザフライで計算するときにのみ必要です。

具体的には、examples pageのTwoCounters.hsの例を参照して、これを実行する方法を確認してください。

+0

TwoCounters.hsの例では、ボタンの上または下を押すたびに両方のカウンタが更新されますが、カウンタの1つの値は変更されません。何かを放出すること自体が目に見える効果(つまり、音符を演奏する)になる可能性があるので、これが望ましくない多くの状況を考えることができます。この例を変更して、上下のボタンを押したときにカウンタのうちの1つだけが新しいイベントを受け取るようにする方法がありますか? –

+0

'Behavior'のセマンティクスは、あなたが期待しているものとは異なることに注意してください。それは、 "この値は更新されました"という概念はありません。 ( 'changes'関数がありますが、これは近似値に過ぎません)。音符を演奏するなど、値を「放出」することを気にする場合は、' Event'を使用する必要があります。カウンタの場合、変更後の非アクティブカウンタからのボタン押下を除外することができます。 –

関連する問題