1

次のクラスを考えると、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 スタイル ガイドでは、パブリック ゲッターを含むプライベート フィールドではなく、パブリック 最終フィールドを使用することを提案しています。私は理論的にはこれが好きですが、自明ではないメンバーの構築は実際には初期化子リストに入ることはできません。

前者はエラーとして報告され、後者は報告されない正当な理由がありませんか? それとも、今すぐバグを報告する必要がありますか?

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の両方の実行を拒否します。これは、コンストラクター本体で final フィールドを final にする必要がある (私が正しく読んだ場合) 仕様と一致しています。

于 2012-03-17T23:10:56.607 に答える