[英]What's the difference between super and this in Dart while overriding an operator?
最小的可重现代码:
void main() {
const one = Foo();
const two = Foo();
print(one == two);
}
class Foo {
const Foo();
@override
bool operator ==(Object other) {
assert(super == this); // Works (Line - 1)
return this == other; // Error (Line - 2)
// return super == other; // Works
}
}
断言有效(Line - 1)
,但(Line - 2)
失败并出现以下错误。 但是,也return super == other
作品。
未捕获的 RangeError:超出了最大调用堆栈大小错误:RangeError:超出了最大调用堆栈大小
首先,第 1 行有效,因为您使用的是Object
class 中的 == 运算符,它根据 object 的地址确定相等性。
在第 2 行,您遇到堆栈溢出(错误,而不是本网站),因为当您测试相等性时,将调用==
运算符,但是当执行到达“第 2 行”时,您再次调用==
运算符导致对==
方法的递归调用。 这会导致一个无限循环,用对==
的调用填充您的调用堆栈,直到它溢出导致您遇到错误。
重载运算符时, super
或this
没有特殊含义。 它们的含义与往常一样。 this
是指当前的 object。 super
是指父 object。 (请记住,如果没有指定,所有对象都有一个隐含的超类Object
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.