F# 出版「;“现有事件值”;认购时

F# 出版「;“现有事件值”;认购时,f#,F#,F#有一个相当不错的事件语法,可以订阅为可观察事件,而无需任何自定义代码。我正在创建一个将更新发布到成员变量的事件。我打算将此事件作为可观察事件订阅,但我希望在订阅时推送现有值(我知道存在)。这是否可能且简单地使用事件语法,或者我是否需要使用例如BehaviorSubject创建一个适当的可观察对象?这在很大程度上取决于您计划如何使用它 当您从一个事件转换为一个可观察对象时,EventArg将作为可观察对象的类型映射到。对于“标准”事件,它将没有值(EventArgs不携带任何信息) 但是,您可

F#有一个相当不错的事件语法,可以订阅为可观察事件,而无需任何自定义代码。我正在创建一个将更新发布到成员变量的事件。我打算将此事件作为可观察事件订阅,但我希望在订阅时推送现有值(我知道存在)。这是否可能且简单地使用事件语法,或者我是否需要使用例如BehaviorSubject创建一个适当的可观察对象?

这在很大程度上取决于您计划如何使用它

当您从一个事件转换为一个可观察对象时,EventArg将作为可观察对象的类型映射到。对于“标准”事件,它将没有值(
EventArgs
不携带任何信息)

但是,您可以轻松使用自定义事件类型,或者事件违反正常的.NET事件准则并使用值本身:

let evt = Event<int>()
let obs = evt.Publish :> IObservable<_>

obs |> Observable.add (fun v -> printfn "New value: %d" v)

evt.Trigger 3
evt.Trigger 4
让evt=Event()
让obs=evt.Publish:>IObservable
obs |>Observable.add(乐趣v->printfn“新值:%d”v)
evt触发器3
evt触发器4

也就是说,根据您的用例,您可能需要查看。这个库是专门为跟踪可变值的变化和发出信号而设计的。它是围绕“信号”的概念构建的,信号是一个包含当前值的可观测值。这使上述概念成为第一类-您可以传递一些东西(信号),这些东西可以在需要时直接用作IObservable,但也可以始终用于获取底层的当前值。实际上,这大大简化了许多用例。

你说的“现有价值”是什么意思?在引发事件时,只有一个值与事件关联。虽然你说的让我想起了Gjarlarhorn的信号。我是从可观察的角度来思考的。事件将更新发布到某些成员变量。我已经在问题中澄清了这一点。这正是Gjarlarhorn的动机。“可观察”没有价值。Gjallarhorn的ISignal扩展了这个精确概念的可观察性。