2011-01-04 8 views
3

간단히 말해 두 번째 연산자가 필요합니까?평등의 순서에 차이가 있습니까?

public static bool operator ==(Vector3 v, float scalar) 
    { 
     return v.X == scalar && v.Y == scalar && v.Z == scalar; 
    } 

    public static bool operator ==(float scalar, Vector3 v) 
    { 
     return v == scalar; 
    } 

답변

4

당신이 비대칭 평등 테스트를 허용하려면 예, 그것은 필요 : 당신이 "연산자 '== 같은 말을 컴파일 타임 오류가 발생하려는 첫 번째 버전없이

bool foo = (yourVector3 == 5); // requires the first version 
bool bar = (5 == yourVector3); // requires the second version 

을 '형식'Vector3 '및'int ' "의 피연산자에는 적용 할 수 없습니다. 두 번째 버전이 없으면 오류는 "Operator '==' 'int'및 'Vector3'유형의 피연산자에 적용 할 수 없습니다.".

+0

이상한. 자, 내가 왜 묻지 않을까요, 왜 이것이 내장되어 있지 않습니까? – Lazlo

2

동등성은 교환 가능합니다. == b 일 경우 b == a도 유효합니다. 이것 때문에 당신이 혼란을 겪었을 때 혼란을 겪었을 때 그것을 뒤집어서 다음과 같은 오류가 발생했습니다.

연산자 '==는'타입 '부동'과의 피연산자에 적용 할 수 없습니다 'Vector3'

그러나 엄격하게 더 말하기 당신이 필요하지 않습니다. 그것은 정말 나쁜 냄새가 나을 것입니다.

관련 문제