Observable de la séquence en F #
-
27-09-2019 - |
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 ()
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/