2009-07-16 12 views
1

Ereignisse funktionieren ähnlich wie Sequenzen in F #. Sie können Sequenzausdrücke mit Sequenzen verwenden. Gibt es einen ähnlichen Erbauer für Ereignisse? Ich konnte es nicht finden.Gibt es einen Builder für F # -Ereignisse?

Wenn es nicht existiert, warum nicht? (ist es unmöglich oder nicht geeignet?) Wenn die Antwort ist, dass es gerade noch nicht implementiert ist, dann werde ich es versuchen.

Jules

+0

Sie sollten ein bisschen den Titel klären. "Builder" ist ein sehr allgemeiner Begriff. Ich denke, du meintest "custom workflow" oder "computation expression builder". – Joh

Antwort

2

Tomas hat some research hier getan, und dies scheint eine fruchtbare Allee.

+0

Danke, das sieht gut aus. Ich habe nicht daran gedacht, Funktionalität im Async-Builder bereitzustellen, das ist schlau! Danke auch für den Link, Tomas 'Website, wenn sie mit ausgezeichnetem Material gefüllt ist. Können Sie eine Bindung und Rückgabe speziell für Ereignisse definieren? Ich dachte eine Weile nach, fand aber keine befriedigende Antwort. Zum Beispiel 'Ereignis {lassen! a = eventA in a + 2} 'würde dasselbe tun wie map (fun a -> a + 1) eventA'. Aber was würde 'Ereignis {lassen! a = eventA in lassen! b = eventB im Gegenzug a + b} 'bedeuten? Ich habe jedoch gefunden, dass wenn Sie das letzte Ereignis, das angekommen ist, zwischenspeichern Sie Zeit variieren Werte wie in Zellen oder FRP. – Jules

+0

Und für diese Zellen könnte ich einen Builder definieren. Hier ist, was ich bisher habe: http://fsharpcells.codeplex.com/. Ich würde gerne irgendwelche Kommentare hören. – Jules

0

Während für Sequenzen macht es Sinn, eine Gruppe von Objekten zu erstellen für Ereignisse zu verarbeiten, wäre es völlig sinnlos. Bitte bedenken Sie, dass Ereignisse nur dazu dienen, eine Reaktion auf externe Ereignisse zu ermöglichen. Sie sollten also niemals einen Ereignisgenerator benötigen. Wenn Sie einen Event-Handler haben, der eine Verarbeitung durchführt, können Sie die Logik und die Ereignisverarbeitung einfach in separate Funktionen aufteilen und die Funktion auf Daten anwenden, die Sie tatsächlich im Voraus oder nach bekannten Regeln und in einem bekannten erzeugen können Reihenfolge (für die Sie tatsächlich einen Sequenzausdruck verwenden könnten).

1

Vielleicht hilft:

prüfen Events in F#, wie benutzerdefinierte Ereignisse zu erstellen. Dann könnten Sie eine Sequenz erstellen und sie abbilden, filtern und iterieren.

Verwandte Themen