如何在F#中使用Observable.Zip

fah*_*ash 2 f#

这是我在C#中的代码

Observable.Zip(ob1, ob2, (a, b) => a + b);
Run Code Online (Sandbox Code Playgroud)

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

ob1 |> Observable.Zip(ob2, Func<_,_,_> (fun a b -> a + b))
Run Code Online (Sandbox Code Playgroud)

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

任何线索?

以下工作正常,我只是好奇我是否可以让管道转发操作员在这里工作.从技术上讲,它应该将左侧的ob1作为第一个参数,并将两个提供的参数作为第二个和第三个参数?

 Observable.Zip (ob1,ob2 ,Func<_,_,_>(fun a b -> a + b))
Run Code Online (Sandbox Code Playgroud)

Car*_*ten 5

正如评论中提到的,您可以实现这样的简单包装:

    open System.Reactive.Linq

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

只需按照您的意愿执行此操作:

ob1 |> zipWith (fun a b -> a+b) ob2
Run Code Online (Sandbox Code Playgroud)

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

ob1 |> zipWith (+) ob2
Run Code Online (Sandbox Code Playgroud)