从F#调用具有多个参数的C#函数

5

使用f.Invoke从F#中调用f:Func<'T, 'T>很容易,只需使用'T -> 'T

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

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

2个回答

9

尝试:

let g = f.Invoke |> FuncConvert.FuncFromTupled

8
请注意,如果您只想调用函数,则不需要将其转换为接受两个参数的函数。
如果您已经知道函数的参数,则可以将其视为接受元组的函数来调用:
f.Invoke(40, 2)

Func<T1, T2, R>委托转换为函数'T1 -> 'T2 -> 'R仍然很有用,如果您需要将其传递给期望此类型的柯里化函数(多参数函数)的一些代码。但即使这样,您也可以使用显式lambda表达式来编写它:
functionTakingTwoArgumentFunc (fun a b -> f.Invoke(a, b))

这正是FuncConvert.FuncFromTupled所做的。

(意思是该函数可以实现上述功能)

谢谢!柯里化函数是这种情况。 - V.B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接