【发布时间】: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 () -> obs.OnNext("xxx")。 -
谢谢。我试过这个并编译但我没有调用 OnNext。我一直在研究 Observable.create 的实现,它的定义如下: /// 从指定的订阅方法实现创建一个可观察序列。 let create subscribe = let subscribe observer = Action (subscribe observer) Observable.Create(Func
,Action> subscribe) 我认为这是不正确的。我可能会在 GitHub 上向作者提出问题。 -
同意,这在我看来非常可疑。
标签: f# system.reactive