Dart 2中的动态类型可以分配给差分类型的几个值吗?

时间:2018-04-03 05:08:44

标签: dynamic dart type-inference dart-2

Dart 2中的动态类型可以分配给差异类型的值以及编译如何推断它们?

例如,dart 2中的x类型是什么,这会编译吗?

dynamic x = 1;
x = x + "Hello";

2 个答案:

答案 0 :(得分:4)

dynamic类型很特别。这真的意味着“相信我,我知道我在做什么"它会关闭一些静态类型检查。

作为类型约束,dynamic实际上等同于Object(您可以将任何值赋给类型为dynamic的变量),但是当您尝试在对象上调用方法时,即使Object上不存在该方法,您也可以尝试

在这种情况下,dynamic x = 1;有效,因为1可分配给Object。 第2行失败。 x = x + "Hello"; 尝试+作为参数调用1上的"Hello"方法,即使存在+运算符,参数的类型错误。

你说"相信我,我知道我在做什么",所以编译器允许你尝试 - 没有静态警告或错误。你得到他们错误的类型,所以运行时会在事情变得不健全之前阻止你。 您也可以编写x.argleBargleGlopGlyf(42),编译器仍然无法阻止您,即使程序中的任何位置都没有argleBargleGlopGlyf方法。具有强大的静态功能带来了巨大的动态责任。

答案 1 :(得分:3)

在Dart 2中,dynamic是一种特殊类型的签名 - 表示任何

在上面的示例中,xdynamic。在第1行的运行时,它将是一个int。因此,如果您撰写print(x is int),则会true。但是,静态地,它是dynamic。您无法获得代码完成(尝试在IDE中键入x.

下一行将是运行时错误(如果输入正确,则为静态错误)。

根据我的经验,使用Dart 2,您很少使用dynamic关键字。