Dart 2 中的动态类型可以分配给不同类型的多个值吗?

Can dynamic type in Dart 2 assign to several value of difference type?

Dart 2 中的动态类型可以分配给不同类型的值吗?编译如何推断它们?

例如,dart 2 中的 x 类型是什么,它可以编译吗?

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

在 Dart 2 中,dynamic 是一个特殊的类型签名 - 有点表示 任何东西

在你上面的例子中,xdynamic。在第 1 行的运行时,它将是一个 int。所以如果你写print(x is int),它就会是true。但是,静态地,它是dynamic。你不会得到 code-completion(尝试在 IDE.

中输入 x.

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

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

dynamic类型比较特殊。它确实意味着 "trust me, I know what I'm doing" 并且它关闭了一些静态类型检查。

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

上不存在

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

您说 "trust me, I know what I'm doing",所以编译器让您尝试 - 没有静态警告或错误。你把它们打错了,所以运行时会在事情变得不正常之前阻止你。 您也可以编写 x.argleBargleGlopGlyf(42),编译器仍然不会阻止您,即使您的程序中的任何地方都没有 argleBargleGlopGlyf 方法。静态能力越大,动态责任越大。