Список смешанных типов в дартс - PullRequest
1 голос
/ 21 июня 2019

Этот компилирует в Dart:

var  data = ["abcd", 34, "ef", false];
int n = data[1];
print(n*2); // -> 68

Я думал, что элементы списка должны быть одного типа.И нет неявного преобразования из int в строку или из bool в строку в A):

 print(data[1] is int);    // -> true
 print(data[3] is bool);   // -> true
 print(data[1] is String); // -> false

EDIT : как указал Маттиа, реальная ошибка в следующих строках не связаначтобы поменять местами элементы в списке инициализации, но скопировать / вставить из A) в B), оставив тот же индекс ([1])

И это не компиляция («abcd» поменялся местами с 34):

var  data = [34, "abcd", "ef", false]; // -> type error
int n = data[1]; //EDIT: this is a non sense, should be data[0] (no error generated)
print(n*2);  

Воспроизводимый DartPad

Почему?Какой-то принцип замещения на работе?

1 Ответ

0 голосов
/ 22 июня 2019

Если вы хотите, чтобы список принимал только один тип, вам нужно добавить generic type, например:

var  data = <int>["abcd", 34, "ef", false]; // -> Error

по умолчанию, если вы не добавите один dynamic, будет использоваться, и он будет принимать все типы переменных.

Второй пример компилируется, но выдает ошибку времени выполнения, потому что data[1] не int, а String

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