2012-07-20 2 views
3

이것은 내가 아는 한 가치가 없습니다. 질문을 연구하면서 이것을 발견했습니다. VBA에서왜이 상황에서 1 = 1이 맞지 않습니까?

:

다음 감안할 때 : Dim a As Boolean, b As Boolean, c As Boolean

코드 a = b = c = 1 = 1 이 False로 지정합니다.

그러나 a = b = c = true은 a를 true로 지정합니다.

누구에게 설명 할 수 있습니까? 분명히 1 = 1이 사실로 평가됩니다.

보조 노트로 a = 1 = 1도 true를 할당합니다. 또한 동작은 부울 값 대신 변형을 사용하여 동일합니다.

다시 말하지만 이것은 실제적인 목적이 없다는 것을 알고 있습니다. 누군가가 행동을 설명 할 수 있는지 궁금합니다.

답변

6

에 식을 문을 변경하는 것입니다 모든 연산자이기 때문에 왼쪽에서 오른쪽으로 평가 동등한 우선 순위.

a = b = c = 1 = 1 

b = c는 True를 반환합니다.

True = 1은 비교하기 전에 True로 -1로 변환되기 때문에 False를 반환합니다. 거짓

= 1 반환 거짓

a = b = c = true 

B = C는 진정한 진정한

= 진정한 진정한 수익을 반환합니다.

+1

맞습니다.a = b = c = -1 = -1은 A에 대해서도 true를 반환합니다. – Trace

+0

아, 나는 왼쪽으로 생각했다. 그러나 그것은 확실히 의미가 있습니다. –

1

저는이 경우 왼쪽에서 오른쪽으로 비교를하고 생각할 것 같지 않은 것으로 생각합니다.

yuo 사실

b = True 
c = True 

에 b와 c를 초기화하고

a = c = 1 = 1 

에 대한 값을 확인한다면 당신은 여전히 ​​

그렇게 생각하는 것이 거짓으로 찾아 낼 것입니다 그것에 대해, 그것은 그 것처럼 보일 것입니다.

a = b = c = 1 = 1 

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

에 브래킷을 여전히 잘못된 것 변경된 경우에도

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

도 effectlive입니다.

b와 c 주어진이 (거짓) 초기화되지 않은, 당신은이 사실로 얻을 수있는 유일한 방법은

a = (b = c) = (1 = 1) 
관련 문제