使用f:Func<'T, 'T>
F#很容易调用'T -> 'T
f.Invoke
但是我应该如何f:Func<'T, 'T, 'T>
从 F# 调用 as 'T -> 'T -> 'T
?
当我使用f.Invoke
I get'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
它的作用。