f#功能未被识别为参数

时间:2015-08-20 02:19:45

标签: f# system.reactive agent

请打开这些类型的签名,以帮助我理解为什么这不起作用。 然后,如果你有一个解决方案,那也会很棒。

我有这个代码,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;的确切规范吗?

好吧,有些事情,我得到这个函数需要太多的参数,或者在不期望函数的上下文中使用enter image description here

帮帮我......我随口承认我很害怕F#

1 个答案:

答案 0 :(得分:2)

首先,agent.Post返回unit,这与void不同。 F#通常会在voidunit之间来回转换,但它们不是一回事。

其次,F#函数不会隐式转换为.NET委托。 但是有一些方法可以做到:

您可以使用其构造函数显式创建委托:

let o = Observer.Create (new Action<_>( agent.Post ))

Lambdas也很好地包裹

let o = Observer.Create (fun msg -> agent.Post msg)

使用F#Rx-wrappers

还有一个couple of F# wrappers/interop for Rx on nuget - 只是看看,我想任何人都会这样做