Dynamic Dart 2中的“动态类型”是否可以指定多个不同类型的值?
Dart 2中的动态类型可以分配给差异类型的值吗?编译如何推断它们 例如,dart 2中的x类型是什么,它是否编译Dynamic Dart 2中的“动态类型”是否可以指定多个不同类型的值?,dynamic,dart,type-inference,dart-2,Dynamic,Dart,Type Inference,Dart 2,Dart 2中的动态类型可以分配给差异类型的值吗?编译如何推断它们 例如,dart 2中的x类型是什么,它是否编译 dynamic x = 1; x = x + "Hello"; 在Dart 2中,dynamic是一种特殊类型的签名—某种程度上表示任何东西 在上面的示例中,x是dynamic。在运行时,在第1行,它将是一个int。因此,如果您编写print(x是int),它将是true。但是,从静态角度看,它是动态的。您将无法完成代码(请尝试在IDE中键入x.) 下一行是运行时错误(如果键入正
dynamic x = 1;
x = x + "Hello";
在Dart 2中,
dynamic
是一种特殊类型的签名—某种程度上表示任何东西
在上面的示例中,x
是dynamic
。在运行时,在第1行,它将是一个int。因此,如果您编写print(x是int)
,它将是true
。但是,从静态角度看,它是动态的。您将无法完成代码(请尝试在IDE中键入x.
)
下一行是运行时错误(如果键入正确,则为静态错误)
根据我的经验,在Dart 2中,您很少使用
动态
关键字。在Dart 2中,动态
是一种特殊类型的签名,可以表示任何内容
在上面的示例中,x
是动态的
。在运行时,在第1行,它将是一个int。因此,如果您编写print(x是int)
,它将是真的
。但是,静态地说,它是动态的
。您将无法完成代码(尝试在IDE中键入x.
)
下一行是运行时错误(如果键入正确,则为静态错误)
根据我的经验,使用Dart 2时,您很少会使用
动态
关键字。动态类型是特殊的。它真正的意思是“相信我,我知道我在做什么”,并关闭一些静态类型检查
作为类型约束,dynamic
实际上等同于Object
(您可以使用dynamic
类型为变量指定任何值),但是当您尝试调用对象上的方法时,您可以尝试,即使对象上不存在该方法
在这种情况下,dynamic x=1;
起作用,因为1
可分配给对象。
第2行失败。x=x+“Hello”
尝试调用1
上的+
方法,将“Hello”
作为参数,即使+
运算符存在,参数的类型也不正确
你说“相信我,我知道我在做什么”,所以编译器让你试试——没有静态警告或错误。你输入错误,所以运行时会在事情变得不正常之前阻止你。
您也可以编写x.argleBargleGlopGlyf(42)
,即使程序中没有argleBargleGlopGlyf
方法,编译器也不会阻止您。强大的静态能力带来强大的动态责任。动态
类型是特殊的。它确实意味着“相信我,我知道我在做什么”,它会关闭一些静态类型检查
作为类型约束,dynamic
实际上等同于Object
(您可以使用dynamic
类型为变量指定任何值),但是当您尝试调用对象上的方法时,您可以尝试,即使对象上不存在该方法
在这种情况下,dynamic x=1;
起作用,因为1
可分配给对象。
第2行失败。x=x+“Hello”
尝试调用1
上的+
方法,将“Hello”
作为参数,即使+
运算符存在,参数的类型也不正确
你说“相信我,我知道我在做什么”,所以编译器让你试试——没有静态警告或错误。你输入错误,所以运行时会在事情变得不正常之前阻止你。
您还可以编写x.argleBargleGlopGlyf(42)
,即使程序中没有argleBargleGlopGlyf
方法,编译器也不会阻止您。强大的静态能力带来强大的动态责任