我正在使用 Math.net,除其他我使用积分的方法外,我使用的积分函数定义为以下:
public static double IntegrateComposite(
Func<double, double> f,
double intervalBegin,
double intervalEnd,
int numberOfPartitions)
但是,我的通话语法是:
p = IntegrateComposite(
tau => MyFunction(r, tau, appCfg, Ta, Da) * ProbDensity(tau),
lowLim, hiLim, 32)
我的函数最好定义为Func<double, double, double, double, double, double>
,而不是上面的Func<double, double>
,但一切正常
为什么?
答案 0 :(得分:5)
这是您传入的函数,唯一的输入参数是tau。
tau => MyFunction(r, tau, appCfg, Ta, Da) * ProbDensity(tau)
其他变量r, appCfg, Ta, Da
被closure“封闭”
答案 1 :(得分:2)
Func<double, double>
表示
一个函数,它接受1个类型为double的参数,然后返回double
无论计算中涉及多少外部变量,这正是箭头函数的作用。
答案 2 :(得分:1)
Func<T1, T2, T3..., T(n), TResult>
是一种类型,表示一种方法,该方法采用(n)个具有指定类型(可以为0)的参数,并返回类型为TResult
的对象。
通过Func<double, double>
,它指定它必须是一种以一个double
作为参数并返回double
的方法。
在此示例中,使用了Lambda函数(也可以由Func表示)。
tau => {return MyFunction(r, tau, appCfg, Ta, Da) * ProbDensity(tau)},
您传递给lambda函数的唯一参数是tau
,可以在箭头的左侧看到。其他变量,例如r
,tau
,appCfg
...是捕获的变量。
另一个通用委托示例:
向(obj, e) => {Console.WriteLine(obj)}
传递了两个名为obj
和e
的变量。与您的示例不同,它什么也不返回。表示为Action<T1, T2>
,它表示什么都不返回的方法。