Question

Est-il possible de créer une observable à partir d'une séquence en F #?

Le comportement requis est qu'un observateur souscrivant à la observable résultante reçoit toutes les valeurs de l'une des séquences à la fois.

Modifier : La question peut être formulée comme: Y at-il un équivalent à Rx.Observable.FromArray([1,2,3]) comme le montre ici F #?

Edit 2 : Merci à tous. Il m'a fallu un certain temps pour trouver la réponse, pour constater que Desco a déjà répondu. Par souci d'exhaustivité, voici comment cela fonctionne:

//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 ()
Était-ce utile?

La solution

est System.Reactive.Linq .Observable.ToObservable (cette source IEnumerable) situé dans System.Reactive.dll la chose que votre voulait?

Autres conseils

Juste au cas où vous vouliez éviter la dépendance supplémentaire, il est en fait assez facile à mettre en œuvre le comportement en utilisant des événements F # et la fonction Observable.guard que je l'ai déjà utilisé dans une autre réponse ici à StackOverflow.

Voici la mise en œuvre ainsi qu'un bref exemple:

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")

Et pour être complet, la mise en œuvre des regards Observable.guard comme ceci:

/// 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 peut essayer Reactive Extensions. S'il vous plaît se référer à l'entrée de blog suivants qui pourraient vous aider beaucoup.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top