2

有一个如下的简单类被认为是一个静态警告,为什么?

运算符“否定”应返回数字类型

 
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 节运算符,考虑将具有可能的空值类型的 negate 定义为错误样式,并应向用户报告静态警告。

定义一个名为 negate 的空值方法或一个名为 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 回答