Pregunta

¿Hay una manera de crear un observable a partir de una secuencia en F #?

El comportamiento requerido es que un observador la suscripción al observable resultante recibe todos los valores de la secuencia de uno a la vez.

Editar : La pregunta se puede enmarcar como: ¿Hay un equivalente a Rx.Observable.FromArray([1,2,3]) como se muestra aquí en F #?

Editar 2 : Gracias a todos. Me tomó un tiempo para encontrar la respuesta, sólo para encontrar que desco ha respondido ya. En aras de la exhaustividad, aquí es cómo funciona:

//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 ()
¿Fue útil?

Solución

Es System.Reactive.Linq .Observable.ToObservable (esta fuente IEnumerable) ubicado en System.Reactive.dll lo que su querido?

Otros consejos

En caso de que quería evitar la dependencia adicional, en realidad es bastante fácil de implementar el comportamiento usando eventos F # y la función Observable.guard que ya he utilizado en otra respuesta aquí en StackOverflow .

Esta es la aplicación junto con un breve ejemplo:

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

Y para completar, la puesta en práctica de miradas Observable.guard como esto:

/// 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 puede tratar extensiones reactivas. Por favor refiérase a la siguiente entrada del blog que podría ayudar mucho.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top