Dart编辑器关于最终字段的错误报告不一致

时间:2012-03-17 22:30:43

标签: dart dart-editor

鉴于以下类,Dart编辑器(版本5549)给了我一些相互矛盾的反馈(根据构造函数体中的注释):

class Example {
  final int foo;

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

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

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

我错过了将前者报告为错误的正当理由而后者不是?或者我现在应该提交错误吗?

1 个答案:

答案 0 :(得分: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 = 1 this.foo = 2 这一行。这与需要(如果我正确读取)最终字段在构造函数体中最终的规范是一致的。