我调试的一个项目,现在和它具有以下签名的函数:可选BYVAL布尔参数不采取它的默认值
Public Function changeRemoteDirectory(ByVal newDirectory As String, Optional ByVal Direction As Boolean = True) As Boolean
MsgBox(direction)
'rest of code
End Function
我试图找出是什么导致这个函数返回当我知道它应该返回True
的False
值因为我提供输入,所以我把MsgBox(direction)
到Function
看什么的direction
的价值是,当我打电话给Function
。我叫这样的功能,但我收到了MsgBox
这显示了direction
值是False
:
changeRemoteDirectory("/internal")
第一个参数工作得很好,并需要它正确地执行工作的代码,但我想不通在为什么Direction
的值为False
的情况下,我相信它的默认值应该是True
。如果需要,我并不完全反对重写Function
,但是在这里任何人都可以辨别为什么Direction
没有True
的值,当调用函数changeRemoteDirectory()
时没有提供第二个参数?
改为使用重载。您可以获得与调试和性能问题相同的功能。 – jbabey
@jbabey - 谢谢。如果我最终不得不重写这个函数,那正是我想要做的。无论如何,我仍然好奇为什么会发生这种情况,因为我从未遇到过这个问题。 –
听起来好像您正在经历可选参数导致的许多痛苦之一。当调用'changeRemoteDirectory'的代码被编译时,可选参数被注入到调用中,就像'const'在编译时被替换一样。没有重新编译**调用者**,对可选参数值的更改不会更新。请参阅[本文](http://jelle.druyts.net/2003/05/17/OptionalParametersVBNET.aspx)了解更多信息。 – jbabey