f#函数未被识别为参数
请打开这些类型签名以帮助我理解为什么这不起作用。 那么,如果你有一个解决方案,那也太好了 我有这个代码,agent.Post命令有签名f#函数未被识别为参数,f#,system.reactive,agent,F#,System.reactive,Agent,请打开这些类型签名以帮助我理解为什么这不起作用。 那么,如果你有一个解决方案,那也太好了 我有这个代码,agent.Post命令有签名Observer.Create):IObserverunit 所以。。。Post是一种方法,不是吗?这是一种只接受一个参数的方法否?它会返回void no?那么,它不应该成为Observer的候选者吗?这不是动作的确切说明吗?首先,agent.Post返回unit,这与void不同。F#通常会在void和unit之间来回转换,但它们不是一回事 其次,F#函数不会隐
Observer.Create):IObserverunit
所以。。。Post是一种方法,不是吗?这是一种只接受一个参数的方法否?它会返回void no?那么,它不应该成为Observer的候选者吗?这不是动作的确切说明吗?首先,
agent.Post
返回unit
,这与void
不同。F#通常会在void
和unit
之间来回转换,但它们不是一回事
其次,F#函数不会隐式转换为.NET委托。
但有一些方法可以做到这一点:
可以使用委托的构造函数显式创建委托:
使用F#Rx包装纸
还有一个-看一看,我想任何人都可以这不是100%正确-我允许自己编辑一下你的答案-我希望你不介意-如果你只是恢复更改(如果你没有足够的代表,让我知道,我会做)不应该
Observer.Create(Action agent.Post)
第一种方法做什么?它看起来有点像这样吵闹。应该这样做,只需添加泛型参数:Observer.Create(Action agent.Post)
。将构造函数用作函数是F#4.0中的一项新功能,我不知道您使用的是哪个版本,因此我希望安全。对于F#3中只有一个参数的构造函数调用,您也可以省去括号;因此,它不会将其视为函数调用。这是互操作的常见陷阱-并不意味着您一点也不差劲但是,如果您不只是发布屏幕截图(通常可复制粘贴的代码是个好主意),您可以帮我们很多忙;)我认识这个代码!:)我最近也上了这门课。。我将为此编写的所有代码上传到github。这是一个VS2013项目,修改为使用Owin+KatanaWebAPI。检查git标记以了解内存、文件和azure持久性替代方案的关键阶段。就这些。希望有帮助!这一切都应该“起作用”。我可以在本地模拟器上运行Azure内容,也可以发布到Azure。
let reservatinoRequestObserver = Observer.Create agent.Post
interface IHttpControllerActivator with
let o = Observer.Create (new Action<_>( agent.Post ))
let o = Observer.Create (fun msg -> agent.Post msg)