这是一个简单的 dart 类:
class MyOperatorClass {
int operator () {
return 5;
}
}
我今天注意到编译没有任何问题。这让我想知道,
operator ()
是什么意思?
通常在 dart 中,您使用
operator
来实现运算符。又名 operator +(other)
或 operator ~()
。但是operator ()
似乎没有有与之相关的操作符...
起初我以为这就是使对象可调用的方法,但事实证明,
MyOperatorClass()()
无法编译(这是因为可调用对象实际上实现了call()
方法)。我向 ChatGPT 询问了这个问题,它完全困惑了,反复讨论 operator ()
是否是创建可调用对象的有效方法,哈哈。
因此,如果它不是如何创建可调用对象,但它确实编译,那么它实际上在做什么?什么时候才能运行?
在本例中,您声明了一个普通方法,该方法恰好是 named
operator
。您可以像任何其他命名方法一样调用它:
void main() {
var x = MyOperatorClass();
print(x.operator()); // Prints: 5
}
从 https://dart.dev/language/keywords,请注意
operator
与 2: 一起列出
带有上标2的单词是内置标识符。这些关键字在大多数地方都是有效的标识符,但它们不能用作类或类型名称,也不能用作导入前缀。
所以
operator
显然作为方法名称是合法的(尽管使用它是不明智的)。