为什么第二个简短形式的构造函数给出了必须初始化name和age而不是注释的actor的错误?



我是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

分析器因此会抱怨nameage没有提供值,因为这两个字段都是用非空类型定义的,因此不能是null(这是Dart中任何变量的默认值,无论其类型如何)。

this.namethis.age是以下代码的快捷方式:

class X{
String name;
int age;
X(String name, int age) : name = name, age = age;
}

name = name之所以有效,是因为不允许在构造函数的初始化部分将形参设置为其他值。所以Dart可以假设第一个name一定是指类变量,而第二个name是指参数,因为参数是作用域中最接近的一个。

相关内容

  • 没有找到相关文章

最新更新