1

このコードでエラーが発生しないのはなぜですか?

List<String> x;

void main() {
  x = [1,23,3,423,2];
  print(x);
}

初心者の質問で申し訳ありませんが、ダーツを学び始めたばかりです。これxは、のリストしか含めることができず、リストではなくStringリストの値のために例外を発生させる必要があることを理解しているためです。これはバグですか、それとも?Stringnum

4

2 に答える 2

4

これは、動作中のオプションの入力です。

var x; // same as List<String> x
List<String> y;

main() {
  x = [1,2,3,4];
  y = x; // valid
  x = y; // valid
  print(x); // [1,2,3,4]
  print(y); // [1,2,3,4]
}

List<String>指定するか、を指定するかにかかわらずvar、コードは同じように実行されます。タイプアノテーション(List<String>)は、コードを検証するためにツールによって使用されます。

dartlangサイトで読むのに良い記事は、オプション型に関する記事です。

編集:実際、これはリストについての興味深い点でもあります。リテラルリスト(例:)を使用してリストを初期化すると、[]実際にはList()、例:を作成することになります。

main() {
  var x = new List(); 
  var y = [];
  print(x is List); // true
  print(y is List); // true
}

ただし、ジェネリックスを使用して型付きリストが必要な場合は、コンストラクター構文を使用する必要があります。例:

main() {
  var x = new List<String>();
  print(x is List); // true
  print(x is List<String>); // true
  print(x is List<num>); // false
}
于 2013-01-16T15:38:28.773 に答える
0

ダーツタイプはオプションであり、静的ではありません。したがって、実行時にすべてのタイプの注釈は基本的に次のように置き換えられますvar

于 2013-01-16T15:37:41.827 に答える