下面是一个简单的dart 类:

class MyOperatorClass {
    int operator () {
        return 5;
    }
}

我今天注意到,这段代码的编译没有任何问题.这让我想知道,operator ()是什么意思?

通常在DART中,您使用operator来实现运算符.也就是operator +(other)operator ~().但operator ()似乎不是一个与之相关的接线员...

起初,我认为这是如何使对象成为可调用的,但事实证明,MyOperatorClass()()不能编译(这是因为可调用对象实际上实现了call()方法).我向ChatGPT询问了这一点,它完全搞不懂,反复询问operator ()是否是创建可调用对象的有效方式,哈哈.

因此,如果创建可调用对象的方式是not,但它是does编译的,那么它实际上在做什么?它什么时候才能运行?

推荐答案

在本例中,您声明的是一个普通的方法,恰好是named operator.您可以像调用任何其他命名方法一样调用它:

void main() {
  var x = MyOperatorClass();
  print(x.operator()); // Prints: 5
}

请注意,从https://dart.dev/language/keywords开始,operator2一起列出:

带有上标2的单词是built-in identifiers.这些关键字在大多数地方都是有效的标识符,但它们不能用作类名或类型名,也不能用作导入前缀.

因此,operator作为方法名称显然是合法的(尽管使用这种名称是不明智的).

Dart相关问答推荐

如何在flutter中管理switch小部件的原生外观

读取有状态(Stateful)小部件的状态

在构建函数之外使用 BuildContext

在`lib`文件夹中使用`src`子文件夹有什么好处吗

如何在 Flutter 中将 textEditiing 控制器与 Provider 一起使用

设置文本以匹配Flutter中的列宽

Flutter:如何检测键盘按键?

在 Dart 中,是否可以有一个 const 闭包映射?

使用where在对象列表中搜索 dart 中的特定对象

如何从JSON对象获取格式化/缩进的JSON字符串?

为什么我不能将数字转换为双精度数?

如何使用 Dart 动态加载 HTML 并插入我的网页?

在 Flutter 的 TextFormField 中管理事件

在 Dart 中修改类内的最终字段

您可以将命名参数与简写构造函数参数结合起来吗?

Dart - 将自纪元以来的毫秒数(UNIX 时间戳)转换为人类可读的时间

使用 Dart 解析 URI 以提取查询参数

从 Dart 应用访问 pubspec.yaml 属性

Dart 中的with关键字

如何在 Dart 中为 Completer.CompleteException(exception, stackTrace) 获取当前堆栈跟踪;