[英]Dart: How does Dart match the named parameters in a Constructor of a Class?
[英]Can required parameters in a Dart constructor be named?
我正在为我正在学习的 Flutter/Dart 类使用一些 Dart 代码。 我希望以下代码能够编译,但它没有:
class Person {
String? name;
int? age;
Person(this.name, this.age);
@override
String toString() {
return "name: $name\nage: $age";
}
}
void main() {
final person = Person(name: 'Joe', age: 30);
print(person);
}
当我将构造函数参数设为可选时,如下所示,它会编译:
class Person {
String? name;
int? age;
Person({this.name, this.age});
@override
String toString() {
return "name: $name\nage: $age";
}
}
void main() {
final person = Person(name: 'Joe', age: 30);
print(person);
}
我尝试搜索 Flutter 开发文档的原因,或者在构造函数中使用所需参数及其名称的方法,但我没有找到任何东西。 我当然可以想象我希望所需的构造函数参数具有名称的情况。
我的 pubspec.yaml 指定以下内容: environment: sdk: ">=2.12.0 <3.0.0"
您的第一个示例在 dart 中使用了所谓的“位置参数”。 您不能使用名称标签调用位置参数,这就是第一个示例无法编译的原因。
第二个示例使用“命名参数”。 {}
中定义的任何参数都被视为命名参数,并且必须使用名称标签进行调用。 正如 dart 语言教程中所解释的,命名参数是可选的,除非它们被明确标记为required
。
因此,只需在您需要的任何命名参数之前添加required
关键字。
class Person {
String? name;
int? age;
Person({required this.name, required this.age});
@override
String toString() {
return "name: $name\nage: $age";
}
}
void main() {
final person = Person(name: 'Joe', age: 30);
print(person);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.