使用遗留代码我遇到了一些奇怪的变量赋值,我不确定是合法的VB6语法,但我找不到文档来备份这种感觉。
Dim ComStart, ComEnd, CR As Boolean
ComStart = ComEnd = CR = False
我的怀疑是
a)原始声明应为
Dim ComStart as Boolean, ComEnd as Boolean, CR as Boolean
b)现在实施的声明不会向ComStart
分配任何内容。
非常感谢任何答案或文件
答案 0 :(得分:6)
您找到的代码在技术上是 legal VB6,因为它编译并运行。但原作者很可能认为代码会做出不同的事情!有两个误解。
ComStart
和ComEnd
以及CR
是变体,而不是布尔值。 =
是等于运算符,而不是C中的赋值运算符。
CR = False
不会更改CR
的值。它将CR
的当前值与False
进行比较,如果True
等于CR
,则评估为False
。假设它的评估结果为False
ComEnd = False
。同样,这不会改变ComEnd
的值。它将其与False
进行比较,如果True
等于ComEnd
则评估为False
。这一次让我们说它评估为True
。 ComStart = True
。这会将ComStart
的值设置为True
所以你的原始代码
Dim ComStart, ComEnd, CR As Boolean
ComStart = ComEnd = CR = False
创建两个变体ComStart
和ComEnd
以及一个布尔CR
,然后
CR
保留其默认值False
ComEnd
保留其default value,Empty
ComStart
设置为False
,因为Empty = (Empty = False)
为False
。 简单! ...我希望剩下的遗留代码更少,嗯,意外。
答案 1 :(得分:2)
所以代码应该是,正如你猜测的那样:
Dim ComStart as Boolean, ComEnd as Boolean, CR as Boolean
对于经验很少或没有经验的VB6开发人员来说,这是一个常见的错误,或者.NET开发人员正在使用VB6代码:)。它可以工作,因为VB6会假设分配的值并自动投射它,但它也可能导致令人讨厌的错误很难调试。