f# 函数未被识别为参数

f# function not recognized as parameter

请打开这些类型签名以帮助我理解为什么这不起作用。 那么,如果你有解决方案,那就太好了。

我有这段代码,agent.Post 命令的签名是 Observer.Create<'T>(onNext: Action<'T>) : IObserver<'T>

let reservatinoRequestObserver = Observer.Create agent.Post
interface IHttpControllerActivator with

据我所知,这意味着 Observer.Create 应该使用单个通用参数执行操作,然后 return 一个 IObserver。

现在Post的定义是member MailboxProcessor.Post : message:'Msg ->unit

所以... Post 是一种方法,不是吗?这是一种采用单个参数的方法吗?它 return 无效不是吗?那不应该是Observer.Create的候选吗?这不是 Action<'T> 的确切规范吗?

好吧,有些事情,我得到 这个函数接受了太多参数,或者在不需要函数的上下文中使用

帮帮我...我承认我的 F#很烂

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

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

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

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

Lambda 也被很好地包装了

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

使用 F# Rx-wrappers

还有一个couple of F# wrappers/interop for Rx on nuget - 看看吧,我想任何一个都行