鉴于以下类,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的私有字段。我在理论上喜欢这个,但是非平凡的成员构造不能真正进入初始化列表。
我错过了将前者报告为错误的正当理由而后者不是?或者我现在应该提交错误吗?
答案 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 这一行。这与需要(如果我正确读取)最终字段在构造函数体中最终的规范是一致的。