为什么覆盖否定会导致Dart中出现静态警告

时间:2012-08-22 01:48:17

标签: dart

如下所示的简单类被认为是静态警告,为什么?

  

运算符'否定'应返回数值类型

 
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)
    }

 

2 个答案:

答案 0 :(得分:4)

截至2012年8月21日,Dart Specification第7.1.2节运算符考虑将可能的nullary类型定义为否定样式,并应向用户报告静态警告。

  

定义名为negate的nullary方法或名为equals的二进制方法   将与运营商定义具有相同的效果,但被认为是坏的   风格,并会引起静态警告。

     

[...]

     

如果用户声明的返回类型,则为静态警告   operator [] =是显式声明的而不是void。这是一个静态的   如果用户声明的运算符的返回类型等于,则发出警告   明确声明并且不是bool。如果是,这是一个静态警告   用户声明的运算符negate的返回类型是显式的   声明而不是数字类型。

答案 1 :(得分:0)

我们有一个开放的错误:http://code.google.com/p/dart/issues/detail?id=3416