【问题标题】:Multiple variable assignments in one statement in Visual Basic 6Visual Basic 6 中的一个语句中的多个变量赋值
【发布时间】:2012-10-22 13:12:15
【问题描述】:

使用遗留代码时,我遇到了一些奇怪的变量赋值,我不确定它们是否合法 VB6 语法,但我找不到支持这种感觉的文档。

Dim ComStart, ComEnd, CR As Boolean
ComStart = ComEnd = CR = False

我的怀疑是

a) 原始声明应该是

Dim ComStart as Boolean, ComEnd as Boolean, CR as Boolean

b) 现在实现的声明不会将任何内容分配给ComStart

非常感谢任何答案或文档

【问题讨论】:

    标签: vb6 variable-assignment


    【解决方案1】:

    您找到的代码在技术上是合法 VB6,因为它可以编译和运行。但很有可能原作者认为代码会做一些不同的事情!有两个误解。

    • ComStartComEndCR 是变体,而不是布尔值。
    • 在 VB6 中,= 是相等运算符,而不是 C 中的赋值运算符。
      • CR = False 不会更改 CR 的值。它将CR 的当前值与False 进行比较,如果CR 等于False,则评估为True。假设它评估为False
      • 现在您有了表达式ComEnd = False。同样,这不会更改 ComEnd 的值。它将它与False 进行比较,如果ComEnd 等于False,则评估为True。这次假设它的评估结果为True
      • 现在您有了赋值语句ComStart = True。这会将ComStart 的值设置为True

    所以你的原始代码

    Dim ComStart, ComEnd, CR As Boolean
    ComStart = ComEnd = CR = False
    

    创建两个变体ComStartComEnd 和一个布尔值CR,然后

    • CR 保持其默认值,False
    • ComEnd 保持其 default value, Empty
    • ComStart 设置为 False,因为 Empty = (Empty = False)False

    简单! ...我希望遗留代码的其余部分更少,嗯,意外

    【讨论】:

    • +1 以获得信息丰富且有用的答案!这只是其中一项让正确无趣的工作,因为我现在必须使用这些变量重新评估所有内容,并尝试猜测作者认为正在发生的事情与实际发生的事情。欢迎您的意见,但请放心,在这个项目结束之前我会再回到 SO 几次 -_-
    【解决方案2】:

    所以代码应该和你猜的一样:

    Dim ComStart as Boolean, ComEnd as Boolean, CR as Boolean
    

    对于经验很少或没有经验的 VB6 开发人员,或使用 VB6 代码的 .NET 开发人员来说,这是一个常见的错误 :)。它可以工作,因为 VB6 会假定分配的值并自动转换它,但它也可能导致难以调试的严重错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-16
      • 2014-12-25
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      相关资源
      最近更新 更多