【问题标题】:Why does overriding negate cause static warning in Dart为什么在 Dart 中覆盖 negate 会导致静态警告
【发布时间】:2012-08-24 09:10:34
【问题描述】:

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

运算符'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)
    }

 

【问题讨论】:

    标签: dart


    【解决方案1】:

    自 2012 年 8 月 21 日起,Dart Specification 第 7.1.2 节运算符将使用可能的空值类型定义为错误样式,并应向用户报告静态警告。

    定义一个名为 negate 的空方法或一个名为 equals 的二元方法 将与定义运算符具有相同的效果,但被认为是不好的 样式,并会​​导致静态警告。

    [...]

    如果用户声明的返回类型是静态警告 运算符 []= 是显​​式声明的并且不是无效的。它是一个静态 如果用户声明的运算符 equals 的返回类型为 显式声明并且不是布尔值。这是一个静态警告,如果 用户声明的运算符 negate 的返回类型是明确的 声明而不是数字类型。

    【讨论】:

    • 该规范对我来说不合适。为什么将运算符取反的返回类型限制为数字?您可以将其发布到 Dart 问题以寻求修复。
    【解决方案2】:

    我们对此有一个未解决的错误:http://code.google.com/p/dart/issues/detail?id=3416

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-09
      • 2014-06-11
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 2015-04-04
      相关资源
      最近更新 更多