为什么这段代码没有引发错误?
List<String> x;
void main() {
x = [1,23,3,423,2];
print(x);
}
很抱歉这个新手问题,但我刚开始学习飞镖,我问这个是因为我理解x
只能包含一个列表String
并且应该引发异常,因为值不是一个列表String
而是一个列表num
。这是一个错误,还是?
为什么这段代码没有引发错误?
List<String> x;
void main() {
x = [1,23,3,423,2];
print(x);
}
很抱歉这个新手问题,但我刚开始学习飞镖,我问这个是因为我理解x
只能包含一个列表String
并且应该引发异常,因为值不是一个列表String
而是一个列表num
。这是一个错误,还是?
这是可选的输入操作。
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
}
Dart 类型是可选的,不是静态的。所以在运行时所有类型的注解基本上都被替换为var