vb.net - 如何将函数传递给函数? VB 2010 中是否提供仿函数/函数对象?

标签 vb.net functor

我想制作一个带有解析函数的数值积分方法,并将其积分在特定的区间内。对于数值积分程序,我想使用 nr.com 中的一些程序。 .问题是这些是用 C++ 编程的,并且它们使用仿函数将函数传递给集成方法。我怎样才能在 VB 2010 中做到这一点?

我想初始化函数(即为函数 y(x)=a*x+b 设置 a=1,b=0),然后将函数传递给集成方法。然后,当集成方法调用函数时,它只调用带有一个参数的函数(即 x,因为 a,b 已经设置)

在 VB2010 中执行此操作的最佳方法是什么?
我想做一个通用的集成方法,我可以通过任何单值函数和集成限制。

我刚刚开始使用 VB,从我目前发现的情况来看,您拥有的工具似乎是
- 给我们一个函数的代表
- 为函数使用 lambda 表达式
- 发送一个指针/地址
- 创建一个函数类/结构并将其提交给函数

至于现在我最倾向于创建一个函数类。但我不确定如何。
前任我为要集成的每个“uniqe 函数”创建了不同的类,但是当我需要在集成函数调用中指定参数类型时,如何将它们传递给集成函数?

这似乎是一个适用于许多数学运算的基本问题,所以我认为澄清这一点非常有用。

最佳答案

抱歉,代码块较长,但我想向您展示 lambdas 和匿名函数可用的不同选项。

首先,我们将创建一些基本功能来玩......

'Solves a basic linear equation y(x) = ax + b, given a, b, and x.
Function Linear(a As Double, b As Double, x As Double) As Double
    Return a * x + b
End Function

'Return the inverse of a number (i.e. y(x) = -x)
Function Inverse(x As Double) As Double
    Return -x
End Function

和一个接受函数的函数。
'To help differentiate the type of the parameter from the return type,
'I'm being generic with the return type. This function takes any function 
'that takes a double and returns some generic type, T.
Public Function EvalEquation(Of T)(x As Double, equation As Func(Of Double, T)) As T
    Return equation(x)
End Function

最后,我们将使用它!
'The closest thing to a functor is probably the AddressOf keyword.
For x = 0 To 10
    Dim answer = EvalEquation(x, AddressOf Inverse)
    'Do something
Next

但是 AddressOf 有一些限制......
EvalEquationForX 需要一个只接受一个参数的函数,因此我不能简单地使用 AddressOf,因为我不能传递额外的参数。但是,我可以动态创建一个可以为我执行此操作的函数。
For x = 0 To 10
  Dim answer = EvalEquation(x, Function(x)
                                   Dim a = 1
                                   Dim b = 0
                                   Return Linear(a, b, x)
                               End Function)
  'Do something
Next

请注意,您可以定义 Func(Of T1, T2, T3, T4,... TResult) ,因此您可以创建一个可以采用两个参数的函数并改用它。
Public Function EvalEquationWithTwoParameters(Of T)(
    a As Double, b As Double, x As Double,
    equation As Func(Of Double, Double, Double, T)) As T

    Return equation(a, b, x)
End Function

并像这样使用它:
For x = 0 To 10
    Dim answer = EvalEquationWithTwoParameters(1, 0, x, AddressOf Linear)
    'Do something
Next

希望有帮助!

关于vb.net - 如何将函数传递给函数? VB 2010 中是否提供仿函数/函数对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7742817/

相关文章:

.net - 如何更改 MonthCalendar 控件中某些日期的颜色?

C++、仿函数、特定任务/场景、将用户输入映射到函数

c++ - 将函数对象传递给 std::function

c++ - std::bind() 中 static_cast 的仿函数版本

vb.net - 如何选择标签

c# - 如何在 LinqPad 查询中显示 MessageBox 对话框?

vb.net - 从 vb.net 中的字符串末尾仅删除一个换行符

vb.net - Visual Basic PictureBox 上没有透明度

haskell - 什么是双仿函数?

c++ - 通过引用设置构造函数复制?