Dart中`operator () { ... }`的作用是什么?
关于Dart中
operator ()的解释 首先明确:operator ()并不是Dart中合法的运算符重载语法,它之所以能编译,是因为编译器将其解析为一个名为operator()的普通方法,而非真正的运算符重载。
具体细节:
- Dart的运算符重载有严格规则,仅允许对语言规范定义的运算符(如
+、-、==、[]等)进行重载,()并不在允许的运算符列表中。 - 你无法通过任何运算符语法调用这个方法,比如
MyOperatorClass()()这种写法会报错——这是实现call()方法的可调用对象的专属语法,和这个operator()方法完全无关。 - 要调用这个方法,只能像调用普通方法一样使用
obj.operator()的形式:void main() { var instance = MyOperatorClass(); print(instance.operator()); // 输出5 }
和可调用对象的区别:
如果要实现可以用()直接调用的对象,正确方式是实现call()方法,这是Dart官方支持的可调用对象语法:
class MyCallableClass { int call() { return 5; } } void main() { print(MyCallableClass()()); // 正常编译并输出5 }
总结:
operator ()这种写法属于语法上的特殊情况,没有实际实用价值,正常开发中不要使用它。如果需要可调用对象,直接实现call()方法即可。
内容的提问来源于stack exchange,提问作者Taylor Brown
相关产品推荐
相关产品推荐

