这是我在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/