参数化列表上的飞镖混乱

时间:2013-01-16 15:28:19

标签: dart

为什么这段代码没有引发错误?

List<String> x;

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

很抱歉新手问题,但我刚开始学习飞镖,我问这是因为我的理解是x只能包含String的列表,并且应该因为值不是String的列表,而是num的列表。这是一个错误,还是?

2 个答案:

答案 0 :(得分: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网站的一篇好文章是关于optional types的文章。

编辑:实际上,这也是关于列表的有趣观点。如果使用文字列表初始化列表(例如,[]),那么实际上是在创建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
}

答案 1 :(得分:0)

Dart类型是可选的而不是静态的。因此,在运行时,所有类型的annonations基本上都被var

取代