gpt4 book ai didi

dart - 用默认值初始化成员的最优雅方法

转载 作者:行者123 更新时间:2023-12-04 05:13:16 28 4
gpt4 key购买 nike

有什么办法可以利用初始化列表来可选地初始化可选
构造函数中的参数?以下示例使用 if(?x)类型
主体中的逻辑,因为目前尚不清楚如何仅在初始化列表中设置 _x
如果传入。

class Point { 
double _x = 0.0;
double get x => _x;
double _y = 0.0;
double get y => _y;

Point(
{
double x,
double y
})
{
if(?x) { _x = x; }
if(?y) { _y = y; }
}
}

另一种方法是使用构造函数:

Point(
{
double x: 0.0,
double y: 0.0
}) : _x = x, _y = y
{
}

但是随后您要重复一次(比一个地方多0.0),并且_x和_y似乎被初始化了两次,一次是针对该成员,另一次是由初始化列表。同样,成员初始化器的一个好处是它可以是一个函数调用,而默认参数的默认值似乎需要常量。我希望/意识到对性能的影响很小。只需要一种可能用于代码生成的好的规范方法。

最佳答案

您可以使用this前缀在构造函数中初始化变量,例如:

class PointA { 
double _x;
double get x => _x;
double _y;
double get y => _y;

PointA({double this._x=0.0, double this._y=0.0});
}

class PointB {
final double x;
final double y;

Point({double this.x=0.0, double this.y=0.0});
}

void main() {
new PointA(_y:2.0);
new PointA(_x:3.0);
new PointA(_x:2.0, _y:3.0);

new PointB(y:2.0);
new PointB(x:3.0);
new PointB(x:2.0, y:3.0);
}

关于dart - 用默认值初始化成员的最优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15394313/

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