【发布时间】:2012-10-13 15:47:55
【问题描述】:
我有许多事件被合并到一个执行某些命令的 observable 中。如果命令成功,则会产生一些结果。此外,还应记录该命令。
就代码而言,这看起来像
let mevts = modifyingevents |> Observable.filter exec_action
|> Observable.add (fun action -> self.OutlineEdited <- true)
函数exec_action 会产生一些副作用,例如编辑树视图。如果成功,则属性 OutlineEdited 设置为 true。
我希望用类似的东西来跟进这个
mevts |> Observable.scan (fun log action -> action::log) []
但事实证明Observable.filter 对每个订阅的观察者 执行一次。意味着副作用会重复。
您能否建议另一种方法来实现相同的结果,而无需执行两次 exec_action?我希望尽可能避免使用可变变量。
【问题讨论】:
-
您可以让
exec_action在内部对lazy进行操作,以便仅在第一次执行时进行评估。
标签: f# observable frp