【问题标题】:Dart Flutter: Syntax confusion in setting default value for class propertiesDart Flutter:为类属性设置默认值时的语法混淆
【发布时间】:2020-08-17 08:27:23
【问题描述】:

以下是类构造函数的两个示例:

class A {
  final String name;
  final String sex;
  A({
    this.name = 'Unknown',
    this.sex = 'Unknown',
  });
}

现在考虑第二类:

class B {
  final String name;
  final String sex;
  B({
    this.name = 'Unknown',
    sex,
  }) : sex = name == 'Unknown' ? 'Unknown' : 'Other';
}

我很困惑,第二个示例是否被视为第一个示例语法的替代方案,还是用于完全不同的目的?

【问题讨论】:

  • 两者是不同的,如果他们没有给出相同的结果,他们不能被认为是替代品!如果我错了,请有人纠正我

标签: class flutter dart syntax constructor


【解决方案1】:

第一个例子允许“sex”是给构造函数的任何值。

然而,第二个示例只接受默认值(“Unknown”,并将“sex”设置为“Other”以获取除“Unknown”之外的任何值。

所以a = A(name:"Jon", sex:"male") 产生a.sex == "male",而b = B(name:"Jon", sex:"male") 产生b.sex == "Other"

如果使用默认值,如x = A(name:"Joe")x = B(name:"Joe"),则生成的对象都将具有x.sex == "Unknown"

【讨论】:

  • 那么在第一个例子的情况下,如果sex = name == 'Unknown' ? 'Unknown' : 'Other'; 两者是相同的(在某种意义上他们都做同样的事情)?尽管它会导致错误,但在哪种情况下第二个语法允许使用三元运算符?
【解决方案2】:

据我所知,由于我没有收到令人满意的答案/评论,因此我最终接受了这一点。

第一个示例的语法允许在属性值为单个非条件值时为该属性分配默认值。

但是,如果需要根据条件分配值(例如第二个示例中的三元运算符),则无法按照第一种语法执行此操作,因为这会导致错误,所以必须按照第二种语法初始化变量。

如果我错了,请纠正我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2011-01-08
    • 1970-01-01
    相关资源
    最近更新 更多