F#工作流生成器用于Rx

3
1个回答

4

首先,原始代码需要稍微更新以适应最新的Rx版本。即,ForWhile应该实现为:

member this.For (xs : 'a seq, f: 'a -> 'b IObservable) =
    Observable.SelectMany(xs.ToObservable(), new Func<_, IObservable<_>>(f)) 

member this.While (f, xs: 'a IObservable) =
    Observable.TakeWhile (xs, new Func<_,bool>(fun _ -> f()))

然后,基于这个,你可以使用以下内容来实现Using

member this.Using(res:#IDisposable, body) = this.TryFinally(body res, fun () -> match res with null -> () | disp -> disp.Dispose())

不错!我喜欢约束符号。看起来应该更仔细地研究fsharpx。 - Bent Rasmussen
我的 For 实现看起来像这样: member this.For(xs : 'a IObservable, f: 'a -> 'b IObservable) : 'b IObservable = xs.SelectMany(f)。但是还没有测试过。 - Bent Rasmussen
这基本上是一样的东西,只是出于样式原因(以匹配其他实现),我没有使用扩展方法格式,并且显式类型参数是为了确认一切按预期工作。 - yamen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接