2011-01-04 6 views
3

要するに、2番目の演算子が必要ですか?平等の順番に違いはありますか?

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 '"型のオペランドには適用できません。 2番目のバージョンがなければ、エラーはのようになります。 "演算子 '=='は 'int'と 'Vector3'の型のオペランドに適用できません"

+0

奇妙な。さて、私は、この組み込みではないのでしょうか? – Lazlo

2

等価性が可換性であるという開発者の期待からです。 == bを行うと、b == aも有効です。このため、もしあなたがそれをやってしまって、それをやり直してしまえば、次のエラーが出るのは混乱するでしょう。

演算子「==」は、あなたがする必要はありません何を話すタイプ「フロート」と「のVector3」

しかし、厳密のオペランドに適用することはできません。それはちょうど本当に悪い匂いだろう。

関連する問題