飞镖中未命名的构造函数

时间:2019-06-27 12:29:30

标签: dart

我在dart中有以下代码:

class Complex {

  num real;
  num imaginary;

  Complex(this.real, this.imaginary);

  Complex.real(num real) {
    Complex(real, 0);
    print('function constructed!!!');
  }
}

void main() {
  var a = Complex.real(1);
}

因此,我想在这里知道构造函数中的问题:Complex.real ...在youtube @ 14:40观看了关于dart的张量编程教程之后,我遇到了这个问题。

为什么使用初始化操作符代替Complex.real(num real) : this(real, 0);

1 个答案:

答案 0 :(得分:1)

Complex.real(num real) {
  Complex(real, 0);
  print('function constructed!!!');
}

调用未命名的构造函数(Complex(real, 0))构造一个不同 Complex实例,然后丢弃结果。因此,您的Complex.real构造函数会产生未初始化的对象。您可以观察到这一点:

Complex.real(num real) {
  Complex(real, 0);
  print('${this.real}'); // Prints: null
}

The syntax for making one constructor leverage another is to use this in an initializer list

Complex.real(num real) : this(real, 0);

正如@lrn所指出的那样,重定向构造函数不能具有主体,因此要使用print行,您需要使用工厂构造函数(或静态方法):

factory Complex.real(num real) {
  final complex = Complex(real, 0);
  print('function constructed!!!');
  return complex;
}
相关问题