通过使用,可以很容易地f:Func<'T, 'T>从F#调用'T -> 'Tf.Invoke
但是我该如何f:Func<'T, 'T, 'T>从F#打电话'T -> 'T -> 'T?
当我使用时,f.Invoke我得到了'T * 'T -> 'T,即一个元组而不是两个参数.
请注意,如果您只想调用它,则无需将该函数转换为带有两个参数的函数.
如果您已经知道该函数的参数,那么您可以将其称为带有元组的函数:
f.Invoke(40, 2)
Run Code Online (Sandbox Code Playgroud)
但是,如果需要将Func<T1, T2, R>委托'T1 -> 'T2 -> 'R传递给需要此类型的curried函数(多参数函数)的代码,则将委托转换为函数仍然很有用.但即使这样,您也可以使用显式lambda来编写它:
functionTakingTwoArgumentFunc (fun a b -> f.Invoke(a, b))
Run Code Online (Sandbox Code Playgroud)
......这正是这样FuncConvert.FuncFromTupled做的.