【问题标题】:How do you use Observable.create in the FSharp.Control.Reactive library?你如何在 FSharp.Control.Reactive 库中使用 Observable.create?
【发布时间】:2017-09-30 09:11:31
【问题描述】:

我正在尝试弄清楚如何使用 FSharp.Control.Reactive 库中的 Observable.create 函数,但似乎遗漏了一些东西。

函数签名定义为:

((IObserver<'a> -> unit -> unit) -> IObservable<'a>)

我尝试了几种不同的方法来创建 observable,例如:

  Observable.create (fun obs -> fun _ -> obs.OnNext("xxx") )
  |> Observable.subscribe (fun x -> printfn "%A" x)

  Observable.create (fun obs -> obs.OnNext("xxx"); fun _ -> () )
  |> Observable.subscribe (fun x -> printfn "%A" x)

编译但不会执行 OnNext,因此不会调用 subscribe 中的 printfn 语句。

我可以直接从 System.Reactive.Linq 命名空间调用 Observable.Create 方法,如下所示:

  Observable.Create(fun (obs : IObserver<string>) -> obs.OnNext("www"); Action( fun _ -> () ) )
  |> Observable.subscribe (fun x -> printfn "%A" x)

这会将“www”打印到交互中。 同样,我可以使用 Observable.createWithDisposable 如下:

Observable.createWithDisposable(fun obs -> obs.OnNext("yyy") ; Disposable.Empty )
|> Observable.subscribe (fun x -> printfn "%A" x)

并将其发送到交互式打印“yyy”

所以这只是我遇到问题的 FSharp.Control.Reactive.Observable.create。

我已经看过了,但找不到任何关于如何调用它的示例,因此我们将不胜感激。

谢谢

【问题讨论】:

  • 那个签名对我来说看起来很奇怪,但试试fun obs () -&gt; obs.OnNext("xxx")
  • 谢谢。我试过这个并编译但我没有调用 OnNext。我一直在研究 Observable.create 的实现,它的定义如下: /// 从指定的订阅方法实现创建一个可观察序列。 let create subscribe = let subscribe observer = Action (subscribe observer) Observable.Create(Func,Action> subscribe) 我认为这是不正确的。我可能会在 GitHub 上向作者提出问题。
  • 同意,这在我看来非常可疑。

标签: f# system.reactive


【解决方案1】:

我向开发者提出了一个问题。他们现在删除了 Observable.create 函数,因此您现在可以使用 System.Reactive.Linq.Observable.Create() 方法创建 observable。

这使得这个问题现在无效。

https://github.com/fsprojects/FSharp.Control.Reactive/commit/c8f6d245e75d55b2bd6077c53b311119422c97a1

【讨论】:

    【解决方案2】:

    我曾经asked that使用c#。

    使用 F# Control.Reactive 将是:

            Observable.create(
                fun observer ->                        
                    Action (fun () -> 
                        foo.OnBar(
                           fun (args : Args) -> 
                             observer.OnNext(args)            
                             observer.OnCompleted())))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 2018-12-11
      • 2011-06-14
      • 1970-01-01
      相关资源
      最近更新 更多