使用f:Func<'T, 'T>
'T -> 'T
从F#调用为f.Invoke
但是,如何将{#1}}从F#调用为f:Func<'T, 'T, 'T>
?
当我使用'T -> 'T -> 'T
时,我得到f.Invoke
,即一个元组而不是两个参数。
答案 0 :(得分:7)
请注意,如果您只想调用它,则无需将该函数转换为带有两个参数的函数 如果您已经知道该函数的参数,那么您可以将其称为带元组的函数:
f.Invoke(40, 2)
将Func<T1, T2, R>
委托转换为函数'T1 -> 'T2 -> 'R
仍然有用,如果您需要将其传递给某些需要此类型的curried函数(多参数函数)的代码。但即使这样,你也可以用一个明确的lambda写出来:
functionTakingTwoArgumentFunc (fun a b -> f.Invoke(a, b))
......这正是FuncConvert.FuncFromTupled
所做的。
答案 1 :(得分:6)
尝试:
let g = f.Invoke |> FuncConvert.FuncFromTupled