我正在调试一个项目,它有一个带有以下签名的函数:
Public Function changeRemoteDirectory(ByVal newDirectory As String, Optional ByVal Direction As Boolean = True) As Boolean
MsgBox(direction)
'rest of code
End Function
我试图找出是什么导致此函数返回False
的值,当我知道它应该返回True
给定我提供的输入时,所以我放{{1}进入MsgBox(direction)
以查看Function
时调用direction
的价值。我调用了这样的函数,但我收到了一个Function
,其MsgBox
的值显示为direction
:
False
第一个参数工作得很好,需要它执行的代码才能正常工作,但我无法弄清楚为什么changeRemoteDirectory("/internal")
的值为Direction
,我相信它应该是其默认值为False
。如果需要,我并不完全反对重写True
,但是在这里有人可以看出为什么Function
在调用函数Direction
时没有True
的值没有提供第二个参数?
答案 0 :(得分:2)
听起来你正在经历可选参数导致的许多痛苦之一。
当编译调用changeRemoteDirectory
的代码时,可选参数将被注入调用,就像在编译时将替换const
一样。如果没有重新编译调用者,对可选参数值的更改将不会生效。
有关详细信息,请参阅this article。
通常,您应该使用方法重载而不是可选参数。您可以获得所有相同的功能,而不会产生任何痛苦和性能缺陷。