使用f.Invoke
从F#中调用f:Func<'T, 'T>
很容易,只需使用'T -> 'T
但是我应该如何使用'T -> 'T -> 'T
从F#中调用f:Func<'T, 'T, 'T>
?
当我使用f.Invoke
时,我得到的是'T * 'T -> 'T
,即一个元组而不是两个参数。
尝试:
let g = f.Invoke |> FuncConvert.FuncFromTupled
f.Invoke(40, 2)
Func<T1, T2, R>
委托转换为函数'T1 -> 'T2 -> 'R
仍然很有用,如果您需要将其传递给期望此类型的柯里化函数(多参数函数)的一些代码。但即使这样,您也可以使用显式lambda表达式来编写它:functionTakingTwoArgumentFunc (fun a b -> f.Invoke(a, b))
这正是FuncConvert.FuncFromTupled
所做的。