1

给定以下类,Dart Editor (build 5549) 给了我一些相互矛盾的反馈(根据构造函数正文中的注释):

class Example {
  final int foo;

  Example() :
    foo = 0
  {
    foo = 1; // 'cannot assign value to final variable "foo"'
    this.foo = 2; // ok
  }
}

更令人困惑的是,它会很高兴地为这两行生成等效的(工作的)javascript。方法的情况似乎与构造函数的情况相同;这尤其使我相信在这两种情况下都不允许这样做。

Dart 样式指南建议使用公共最终字段而不是具有公共 getter 的私有字段。我在理论上喜欢这个,但非平凡的成员构造不能真正进入初始化列表。

我是否错过了将前者报告为错误而后者没有报告的正当理由?还是我现在应该提交错误?

4

1 回答 1

1

如果您在 Dart VM 中运行以下命令,这肯定是 JavaScript 生成器中的一个错误:

main() {
  new Example();
}

class Example {
  final int foo;

  Example() : foo = 0 {
    foo = 1;      // this fails in the dart vm
    this.foo = 2; // this also fails in the dart vm
  }
}

然后它拒绝执行foo = 1this.foo = 2行。这与要求(如果我正确阅读的话)最终字段在构造函数主体中是最终字段的规范一致。

于 2012-03-17T23:10:56.607 回答