4

使用f:Func<'T, 'T>F#很容易调用'T -> 'Tf.Invoke

但是我应该如何f:Func<'T, 'T, 'T>从 F# 调用 as 'T -> 'T -> 'T

当我使用f.InvokeI get'T * 'T -> 'T时,即一个元组而不是两个参数。

4

2 回答 2

8

尝试:

let g = f.Invoke |> FuncConvert.FuncFromTupled
于 2013-10-10T08:37:33.723 回答
7

请注意,如果您只想调用它,则不需要将函数转换为带有两个参数的函数。
如果您已经知道该函数的参数,那么您可以将它作为一个带元组的函数来调用:

f.Invoke(40, 2)

但是,如果您需要将委托传递给一些需要这种类型的柯里化函数(多参数函数)的代码,那么将Func<T1, T2, R>委托转换为函数'T1 -> 'T2 -> 'R仍然很有用。但即便如此,您也可以使用显式 lambda 来编写:

functionTakingTwoArgumentFunc (fun a b -> f.Invoke(a, b))

...这正是FuncConvert.FuncFromTupled它的作用。

于 2013-10-10T14:05:41.173 回答