2012-07-20 102 views
3

就我而言,这没有任何价值。我在研究问题时发现了这一点。为什么在这种情况下1 = 1不成立?

在VBA:

考虑以下几点:Dim a As Boolean, b As Boolean, c As Boolean

代码a = b = c = 1 = 1 A分配给假。

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

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

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

我再次知道这没有实际的目的,我只是好奇,如果任何人都可以解释的行为。

回答

6

计算表达式从左向右,因为所有的运营商都同等优先权。

a = b = c = 1 = 1 

b = c返回True。

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

假= 1返回假

a = b = c = true 

B = C,则返回True

真=真返回true。

+1

这是正确的。a = b = c = -1 = -1也对A返回true。 – Trace 2012-07-20 07:56:12

+0

啊,我会假设从右到左。但这当然是有道理的。 – 2012-07-20 12:12:04

1

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

如果宥是初始化b和c为真

b = True 
c = True 

和检查的价值为

a = c = 1 = 1 

你还是会发现它是假的

所以想关于它,它似乎是

a = b = c = 1 = 1 

是effectlive

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

而且,即使你改变了括号

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

它仍然是错误的。

因为b和c未初始化(假),你会得到一个是真实的唯一方法是通过改变语句

a = (b = c) = (1 = 1) 
相关问题