这是我在C#中的代码

Observable.Zip(ob1, ob2, (a, b) => a + b);


我正在尝试使用Pipe-Forwarding运算符将其转换为F#

ob1 |> Observable.Zip(ob2, Func<_,_,_> (fun a b -> a + b))


它不会编译,因为它无法获取我尝试使用的重载。

有什么线索吗?

以下工作正常,我很好奇我是否可以让管道转发操作器在这里工作。从技术上讲,应将左侧的ob1作为第一个参数,并将提供的两个参数作为第2个和第3个右边?

 Observable.Zip (ob1,ob2 ,Func<_,_,_>(fun a b -> a + b))

最佳答案

如评论中所述,您可以实现一个简单的包装器,如下所示:

    open System.Reactive.Linq

    let zipWith (f : 'T -> 'U -> 'R)
                (second: IObservable<'U>)
                (first: IObservable<'T>)
                : IObservable<'R> =
        Observable.Zip(first, second, f)


并按照您的意愿进行操作:

ob1 |> zipWith (fun a b -> a+b) ob2


PS:如果这样做,看起来会更好:

ob1 |> zipWith (+) ob2

关于f# - 如何在F#中使用Observable.Zip,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24417312/

10-11 21:13