Разница между двумя типами инициализации списка в Dart - PullRequest
1 голос
/ 16 июня 2019

Я не могу понять эти два вида инициализации списка. Вот код:

class foo {
  int x;
  double y;
}

void main() {
  final a = List<foo>();

  List<foo> b;

  print(a.runtimeType);
  print(b.runtimeType);
}

В чем разница между a и b здесь? Также a.runtimetype показывает JsonArray, а b.runtimetype показывает Null. Зачем?

1 Ответ

1 голос
/ 16 июня 2019

Оба одинаковы, за исключением того, что первый инициализирован, а второй - нет.

Как документ говорит:

Неинициализированпеременные имеют начальное значение ноль.Даже переменные с числовыми типами изначально равны нулю, потому что числа - как и все в Dart - являются объектами.

Таким образом, любая неинициализированная переменная неявно будет иметь нулевое значение, как мы знаем, null в Dartтакже объект типа Null.

void main() {
  String c;
  int d;
  Symbol e;
  print(c.runtimeType);
  print(d.runtimeType);
  print(e.runtimeType);
}

Все runtimeType s выше будут печатать Null.И если вы правильно инициализируете переменную b, она в равной степени напечатает JSArray<foo>.

void main() {
  final a = List<foo>() ;
  List<foo> b = [foo()];

  print(a.runtimeType); 
  print(b.runtimeType); 
}

. При печати JSArray<foo> вы, вероятно, запускаете ее на DartPad или в виде веб-приложения, вкоторый Дарт скомпилирован в JS.Если вы запускаете его локально как серверное или клиентское приложение, оно выдает List<foo>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...