我在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);
?
答案 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;
}