Dart中动态和静态类型的区别

Let*_*sgo 7 dynamic dart

两个问题。首先,下面是强类型。

String msg = "Hello world.";
msg = "Hello world again.";
Run Code Online (Sandbox Code Playgroud)

而且,低于动态

var msg = "Hello world.";
msg = "Hello world again.";
Run Code Online (Sandbox Code Playgroud)

上面的两个'msg'有什么区别吗?

其次,如果我使用 'new' 关键字来启动一个变量,如下所示,

Map myMap = new Map;
Run Code Online (Sandbox Code Playgroud)

为什么要指示变量'myMap' 是一个Map 实例(Map myMap),因为'new' 关键字已经包含相同的含义?所以,是不是没关系,

myMap = new Map;
Run Code Online (Sandbox Code Playgroud)

因为 'new' 关键字已经暗示新启动的变量既是变量又是 Map 类型,我不明白为什么通常 'Map' 关键字与变量名称一起使用,甚至 'var' 也是如此。

有没有人对此有任何想法(似乎有点多余)Dart 语法?

Mic*_*ick 4

对于第一个问题,每个msg变量包含的内容不会有任何差异。

对于 Map 问题,指定在声明时构造的变量的类型的原因是为了允许子类具有一定的灵活性。以下面的代码为例:

class SubMap extends Map {
  SubMap() : super();
}

Map map = new SubMap();
Run Code Online (Sandbox Code Playgroud)

map这里我们有一个包含对象作为其值的变量,但是我们允许它稍后SubMap包含类型Map(或子类的其他类型)的值。Map

使用 Dart 时要记住的主要一点是它是可选类型的。运行代码时,任何类型注释都没有任何区别(除非您在检查模式下运行)。类型注释的目的是帮助您的 IDE 和其他工具提供自动完成帮助、可能的警告等,而其他完全动态语言(如 Javascript)则无法提供这些帮助。