【发布时间】:2014-06-30 04:51:11
【问题描述】:
我正在尝试通过从私有范围内的函数中剥离参数来清理代码,如下所示:
Function complicatedFunction(x as Double, param1 as Double, param2 as Double)
...
End Function
Function mainActionHappensHere(L as Double, U as Double ...)
Function cleaner(x)
cleaner = complicatedFunction(x, L, U)
End Function
...
cleaner(x) 'Many calls to this function
...
End Function
这可能吗?编译器抱怨“预期结束函数”,因为我在结束外部函数之前开始了一个函数。 Google 也帮不上忙 :( PS 我不能在 mainActionHappensHere() 之外定义cleaner(),因为那样正确的 L 和 U 就不会被传递进去。
【问题讨论】:
-
不,VBA 中没有嵌套函数,但如果你想让它更精简,然后将函数声明为私有,那么只有该模块可以看到它。为什么不能在外面用L、U、x的参数声明呢。从 mainActionHappensHere 传入 L 和 U 是等价的。
-
在逻辑上是等价的,但不是cleaner。我将在所有地方都编写 complexFunction(x,L,U),并且我希望通过在所有地方编写 clean(x) 来更容易理解代码。 PS 如果我在mainActionHappensHere() 之外声明cleaner(),mahh() 仍然能够“看到”cleaner(),但是当我从cleaner() 中调用complexFunction() 时,它将不知道“L”是什么和“U”指的是,因为它们超出了范围!
-
如果你真的想要这个,那么将 L 和 U 声明为模块级别而不是方法级别。但我仍然认为这是一个从无到有的问题 - 调用
mySub x, y, z与调用mySub x相比,尽管 在功能上 暗示mySub x, y, z在实现中几乎没有“清理”任何东西。跨度>
标签: vba parameter-passing nested-function inline-functions