Frage

Gibt es eine Möglichkeit, um eine beobachtbare aus einer Sequenz in F # zu erstellen?

Das erforderliche Verhalten ist, dass ein Beobachter zum resultierenden beobachtbaren Zeichnung zu einer Zeit, alle Werte der Folge erhält man.

Bearbeiten : Die Frage, eingerahmt werden kann: Gibt es ein Äquivalent zu Rx.Observable.FromArray([1,2,3]) wie dargestellt hier in F #?

Edit 2 : Danke an alle. Es dauerte einige Zeit, um die Antwort zu finden, nur um festzustellen, dass desco bereits beantwortet hat. Aus Gründen der Vollständigkeit ist hier, wie es funktioniert:

//Using the Reactive Framework.
//References to System.CoreEx.dll and System.Reactive.dll are needed.

open System.Linq

let observable = Observable.ToObservable [1..10]
let odds = observable |> Observable.filter (fun i -> i%2=1)
let disp = odds.Subscribe (fun i -> printfn "%d" i)
disp.Dispose ()
War es hilfreich?

Lösung

Ist System.Reactive.Linq .Observable.ToObservable (diese IEnumerable Quelle) befindet sich in System.Reactive.dll die Sache nach Ihren Wünschen?

Andere Tipps

Für den Fall, Sie wollten die zusätzliche Abhängigkeit vermeiden, ist es eigentlich ganz einfach ist das Verhalten mit F # Ereignissen und Observable.guard Funktion zu implementieren, dass ich schon in eine andere Antwort hier bei Stackoverflow .

Hier ist die Implementierung zusammen mit einem kurzen Beispiel:

module Observable = 
  let ofSeq s = 
    let evt = new Event<_>()
    evt.Publish |> Observable.guard (fun o ->
      for n in s do evt.Trigger(n))

[ 1 .. 10 ] |> Observable.ofSeq
            |> Observable.filter (fun n -> n%2 = 0)
            |> Observable.add (printfn "%d")

Für die Vollständigkeit, die Umsetzung der Observable.guard sieht wie folgt aus:

/// Creates an observable that calls the specified function after someone
/// subscribes to it (useful for waiting using 'let!' when we need to start
/// operation after 'let!' attaches handler)
let guard f (e:IObservable<'Args>) =  
  { new IObservable<'Args> with  
      member x.Subscribe(observer) =  
        let rm = e.Subscribe(observer) in f(); rm } 

yoou können versuchen, Reactive Extensions. Bitte beachten Sie die folgenden Blog-Eintrag, der Ihnen viel helfen könnte.

http: / /www.navision-blog.de/2009/10/20/iobservableiobserver-using-the-reactive-framework-with-f/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top