3

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

在 VBA 中:

鉴于以下情况:Dim a As Boolean, b As Boolean, c As Boolean

代码a = b = c = 1 = 1 将 a 赋值为 False。

a = b = c = true将 a 赋值为 true。

谁能解释为什么会这样?显然1 = 1评估为真。

作为旁注,a = 1 = 1将 a 分配给 true 。使用变体而不是布尔值的行为也是相同的。

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

4

2 回答 2

6

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

a = b = c = 1 = 1

b = c 返回真。

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

False = 1 返回 False

a = b = c = true 

b = c 返回真

True = true 返回 True。

于 2012-07-20T05:14:15.663 回答
1

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

如果你将 b 和 c 初始化为 true

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 未初始化(假),您将 a 变为真的唯一方法是将语句更改为

a = (b = c) = (1 = 1)
于 2012-07-20T04:47:26.063 回答