在这种情况下,为什么1 = 1不正确?

时间:2012-07-20 04:33:14

标签: vba

就我而言,这没有任何价值。我在研究问题时发现了这一点。

在VBA中:

鉴于以下内容:Dim a As Boolean, b As Boolean, c As Boolean

代码a = b = c = 1 = 1 将a指定为False。

a = b = c = true指定为真。

任何人都可以解释为什么会这样吗?显然1 = 1评估为真。

作为旁注,a = 1 = 1也会将a指定为true。此外,使用变体而不是布尔值的行为是相同的。

我再次知道这没有实际意义,我只是好奇是否有人可以解释这种行为。

2 个答案:

答案 0 :(得分:6)

表达式从左到右计算,因为所有运算符具有相同的优先级。

a = b = c = 1 = 1

b = c返回True。

True = 1返回False,因为True在比较之前转换为-1。

False = 1返回False

a = b = c = true 

b = c返回True

True = true返回True。

答案 1 :(得分:1)

我认为在这种情况下,它是从左到右进行比较,而不是像人们想象的那样进行分配。

如果你要将b和c初始化为真

b = True
c = True

并检查a的值

a = c = 1 = 1

你仍然会发现它是假的

所以考虑一下,似乎

a = b = c = 1 = 1

是有效的

a = (((b = c) = 1) = 1)

另外,即使您将括号更改为

a = (b = (c = (1 = 1)))

它仍然是假的。

鉴于b和c未初始化(False),唯一的方法是将a语句更改为

a = (b = c) = (1 = 1)