3

FRP について頭を悩ませようとしていますが、それが正しいかどうかわかりません。Enterキーが押されるまで、キープレスイベントから文字列を作成したいと思います。Enter キーを押すと、文字列が書き出され、アキュムレータが空の文字列にリセットされます。

Charキーボードのキーが押されるたびにを発行するイベント ソースがありePressedます。まず、重要な 2 種類のキー プレスを分離します。

eWritable = filterE (`elem` ['A'..'z']) ePressed
eEnter = filterE (== '\n') ePressed

これで、送信したいものにそれらをまとめる方法がわかりました。

eToPrint = accumE "" (fmap (:) eWritable)

しかし、Enterキーが押されるまでこれを「保持」する方法、または後でリセットする方法がわかりません。これを行うための正しい、偶像的な方法は何ですか?

4

1 に答える 1

2

これは、eToPrint文字を押したときと Enter キーを押したときの 2 つのイベントの結合のようなものです。以下に例を示します (reactive-banana 0.8):

eToPrint = accumE "" $ unions [(:) <$> eWritable, const "" <$> eEnter]

それを「保持」するには、 を使用できますBehavior


完全な解決策は次のとおりです。

bString = accumB "" $ unions [(:) <$> eWritable, const "" <$> eEnter]
eOut    = bString <@ eEnter

動作bStringには累積String値が含まれます。イベントが発生するたびに、イベントeOutは最後の文字列値を返しますeEnter。特に のセマンティクスに注意してください: が発生accumBした瞬間、 の値はまだ古い値です。eEnterbString

于 2015-06-04T14:41:46.980 に答える