为什么压倒一切的否定导致DART静电警示(Why does overriding negate ca

2019-09-21 10:34发布

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

运营商“否定”应该返回的数值类型

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

 

Answer 1:

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



Answer 2:

截至2012年8月21日的飞镖规范第7.1.2节符,认为与确定可能的零元类型作为不良作风否定,应该给用户一个静态的警告报告。

定义一个无参方法命名为否定或二进制方法命名平等将作为丹宁相同效果的经营者,但被认为是不好的风格,并会导致静态警告。

[...]

这是如果用户声明的operator [] =的返回类型显式声明静态警告,而不是无效的。 这是一个静态的警告,如果用户操作声明的返回类型等于被显式声明,而不是BOOL。 这是如果用户声明的操作否定的返回类型显式声明静态警告,而不是一个数值类型。



文章来源: Why does overriding negate cause static warning in Dart
标签: dart