这是我在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)
正如评论中提到的,您可以实现这样的简单包装:
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)