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
是一个特殊的类型签名 - 有点表示 任何东西。
在你上面的例子中,x
是 dynamic
。在第 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
方法。静态能力越大,动态责任越大。
Dart 2 中的动态类型可以分配给不同类型的值吗?编译如何推断它们?
例如,dart 2 中的 x 类型是什么,它可以编译吗?
dynamic x = 1;
x = x + "Hello";
在 Dart 2 中,dynamic
是一个特殊的类型签名 - 有点表示 任何东西。
在你上面的例子中,x
是 dynamic
。在第 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
方法。静态能力越大,动态责任越大。