我是dart语言的初学者。所以我创建了这个类。
class X{
String name;
int age;
// X(this.name,this.age);
X(name,age);
}
在这段代码中,简短形式的ctor X(name,age)给出了必须初始化name和age的错误,但是ctor X(this.name,this.age)没有给出这样的错误。
在tor X(this.name,this.age)中,编译器知道name和age肯定会被初始化。但是在函数X(name,age)中为什么编译器不能这样做....(很明显name和this.name是一回事,不是吗?)
请详细…
在Dart中,如果您没有指定任何类型,语言将假定您在这种情况下指的是dynamic
。
class X{
String name;
int age;
X(dynamic name, dynamic age);
}
问题就变成了,我们不把这些参数赋值给类中的任何东西,因为构造函数中的name
与类定义中的name
是不同的name
。
分析器因此会抱怨name
和age
没有提供值,因为这两个字段都是用非空类型定义的,因此不能是null
(这是Dart中任何变量的默认值,无论其类型如何)。
this.name
和this.age
是以下代码的快捷方式:
class X{
String name;
int age;
X(String name, int age) : name = name, age = age;
}
name = name
之所以有效,是因为不允许在构造函数的初始化部分将形参设置为其他值。所以Dart可以假设第一个name
一定是指类变量,而第二个name
是指参数,因为参数是作用域中最接近的一个。