繁体   English   中英

Dart 构造函数中的必需参数可以命名吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM