function - Excel VBA : Special Types - Functions as Arguments of Functions

标签 function excel functional-programming arguments vba

VBA 中的函数没有特殊类型。我很难理解如何在 Excel VBA 中将函数作为参数添加到函数中。

我想要完成的是这样的事情:

function f(g as function, x as string) as string
        f = g(x)
end function

目前,我有一组小函数,它们都在重复自身,但只调用一个特定函数。

最佳答案

在您的代码中,函数 g 接受一个字符串参数并返回一个字符串。我建议您创建一个名为 IStringFunction 的类模块来充当所有函数都支持的接口(interface)的定义,因此:

类模块:IStringFunction

Public Function Evaluate(ByVal s As String) As String
End Function

然后,创建几个实现此接口(interface)的示例函数:

类模块:HelloStringFunction

Implements IStringFunction

Public Function IStringFunction_Evaluate(ByVal s As String) As String
    IStringFunction_Evaluate = "hello " & s
End Function

类模块:GoodbyeStringFunction

Implements IStringFunction

Public Function IStringFunction_Evaluate(ByVal s As String) As String
    IStringFunction_Evaluate = "goodbye " & s
End Function

...最后,一些测试代码来练习这些功能:

(标准)模块:测试

Sub Test()

    Dim oHello As New HelloStringFunction
    Dim oGoodbye As New GoodbyeStringFunction

    MsgBox Evaluate(oHello, "gary")
    MsgBox Evaluate(oGoodbye, "gary")

End Sub

Private Function Evaluate(ByVal f As IStringFunction, ByVal arg As String) As String
    Evaluate = f.Evaluate(arg)
End Function

请注意,实现该接口(interface)的类必须具有名为 <Interface>_<Method> 的方法如上例所示,不仅仅是 <Method>正如您所期望的。

下载simple demointermediate demo这里

关于function - Excel VBA : Special Types - Functions as Arguments of Functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1118344/

相关文章:

javascript - 函数式编程: How to convert an impure function to a pure function when the input needs to be mutated

function - Haskell:替代 f = foo e, e = bar d, d = baz c 的模式

python - 如何调用类中的函数?

c++ - 返回与不返回函数?

c++ - 在 C++ 中的类外声明函数有什么好处?

excel - VBA Property Let,不接受传递的值

excel - VBA Excel - 更新 ACCESS 中的记录

vba - 如何将 NumberFormat 设置为小数点后 0 位的数字

JavaScript - getElementsByClassName 适用于一个函数,但不适用于另一个函数

haskell - OCaml 仿函数、Haskell 类型类和多重派生