gpt4 book ai didi

dart - 包裹构造函数参数的大括号代表什么?

转载 作者:行者123 更新时间:2023-12-02 11:10:57 26 4
gpt4 key购买 nike

考虑以下代码:

class Person {
String id;
String name;
ConnectionFactory connectionFactory;

// What is this constructor doing?
Person({this.connectionFactory: _newDBConnection});

}

如果在构造函数的参数前面加上 this,相应的字段将自动初始化,但为什么要加上 {...}

最佳答案

这使得参数成为命名可选参数。

当你实例化一个Person时,你可以

Person p;
p = new Person(); // default is _newDbConnection
p = new Person(connectionFactory: aConnectionFactoryInstance);
  • 如果没有 {},该参数将是强制的
  • 对于[],参数将是可选的位置参数
// Constructor with positional optional argument
Person([this.connectionFactory = _newDBconnection]);
...
Person p;
p = new Person(); // same as above
p = new Person(aConnectionFactoryInstance); // you don't specify the parameter name

命名可选参数对于 bool 参数非常方便(当然也适用于其他情况)。

p = new Person(isAlive: true, isAdult: false, hasCar: false); 

这些参数类型的使用有一个特定的顺序:

  1. 强制(位置)参数(只有位置参数可以是强制的)
  2. 可选位置参数
  3. (可选)命名参数(命名参数始终是可选的)

请注意,位置和命名可选参数对默认值使用不同的分隔符。命名需要 :,但位置需要 =。语言设计者认为冒号更适合 Map 文字语法(我至少会为两者使用相同的分隔符)。

= 从 Dart 2 开始就被支持作为分隔符,并且根据样式指南是首选,而 : 仍然受支持。

另请参阅:

关于dart - 包裹构造函数参数的大括号代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22324934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com