我有許多事件被合併到一個執行一些命令的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