我有许多事件被合并到一个执行一些命令的observable中。如果命令成功,则会发生一些结果。另外,该命令应该被记录下来。带有副作用的F#可观察过滤器
在代码而言,这看起来像
let mevts = modifyingevents |> Observable.filter exec_action
|> Observable.add (fun action -> self.OutlineEdited <- true)
其中函数exec_action
导致某些副作用如编辑一个TreeView。如果这成功,则财产OutlineEdited
被设置为true
。
我希望的东西按照这个像
mevts |> Observable.scan (fun log action -> action::log) []
,但事实证明,Observable.filter为每个订阅观察者执行一次。这意味着副作用将会重复。
您能不能建议另一种方式来达到相同的结果,而不是exec_action
执行两次?如果可能,我希望避免使用可变变量。
你可以有'exec_action'操作在内部使用'lazy',这样评估只发生在第一次执行时。 – ildjarn