2

次のような単純なクラスを持つことは静的警告と見なされますが、なぜですか?

演算子「negate」は数値型を返す必要があります

 
class Vector {
      final int x,y;
      const Vector(this.x, this.y);

      Vector operator +(Vector v) { // Overrides + (a + b).
        return new Vector(x + v.x, y + v.y);
      }

      Vector operator -(Vector v) { // Overrides - (a - b).
        return new Vector(x - v.x, y - v.y);
      }

      Vector operator negate() {    // Overrides unary negation (-a).
        return new Vector(-x,-y);
      }

      String toString() => '($x,$y)';
    }

    main() {
      final v = new Vector(2,3);
      final w = new Vector(2,2);
      assert((-v).x == -2 && (-v).y == -3); // -v  == (-2,-3)
    }

 
4

2 に答える 2

4

2012 年 8 月 21 日の時点で、Dart 仕様のセクション 7.1.2 演算子では、nullary 型の可能性のある negate を不適切なスタイルとして定義することを検討しており、静的な警告をユーザーに報告する必要があります。

negate という nullary メソッドまたは equals という名前のバイナリ メソッドを定義すると、演算子を定義するのと同じ効果がありますが、悪いスタイルと見なされ、静的な警告が発生します。

[...]

ユーザー宣言された演算子 []= の戻り値の型が明示的に宣言されていて void でない場合、これは静的な警告です。ユーザー宣言された演算子 equals の戻り値の型が明示的に宣言されていて、bool でない場合、これは静的な警告です。ユーザー宣言の演算子 negate の戻り値の型が数値型ではなく明示的に宣言されている場合、これは静的な警告です。

于 2012-08-22T01:48:16.597 に答える
0

これについて未解決のバグがあります: http://code.google.com/p/dart/issues/detail?id=3416

于 2012-08-24T01:10:34.957 に答える