请打开这些类型的签名,以帮助我理解为什么这不起作用。 然后,如果你有一个解决方案,那也会很棒。
我有这个代码,agent.Post命令有签名Observer.Create<'T>(onNext: Action<'T>) : IObserver<'T>
let reservatinoRequestObserver = Observer.Create agent.Post
interface IHttpControllerActivator with
据我所知,这意味着Observer.Create
应该使用单个泛型参数执行Action,然后返回IObserver。
现在Post的定义是member MailboxProcessor.Post : message:'Msg ->unit
所以......帖子是一种方法,不是吗?这是一个采用单个参数的方法吗?并且它返回void no?所以它不应该是Observer.Create的候选人吗?这不是Action&lt;'T&gt;的确切规范吗?
好吧,有些事情,我得到这个函数需要太多的参数,或者在不期望函数的上下文中使用:
帮帮我......我随口承认我很害怕F#
答案 0 :(得分:2)
首先,agent.Post
返回unit
,这与void
不同。 F#通常会在void
和unit
之间来回转换,但它们不是一回事。
其次,F#函数不会隐式转换为.NET委托。 但是有一些方法可以做到:
let o = Observer.Create (new Action<_>( agent.Post ))
let o = Observer.Create (fun msg -> agent.Post msg)
还有一个couple of F# wrappers/interop for Rx on nuget - 只是看看,我想任何人都会这样做