dart 中 call() 的实现是什么?

What is the implementation of call() in dart?

我不知何故发现 call() 方法适用于每个函数。 使用这种方法,我可以将 if (callback != null) callback() 更改为 callback?.call()

所以我试图找到call()的实现和文档,但是我找不到。它只是内置方法吗?这个方法的实现是什么? Function.apply()里面会调用吗?

所有 Dart 函数(具有函数类型而不是 class/interface 类型的对象)都有一个 call 方法。

call方法与函数本身具有相同的函数类型,调用它时的行为完全相同。您甚至可以说调用函数 隐式调用其 call 方法。 而且,并非巧合,规范实际上确实说:如果您编写函数调用 e1(e2, e3),那么编译器会检查 e1 是否有 call 方法,如果有,则将其转换为方法调用e1.call(e2, e3).

其他 Dart 对象也可能有一个 call 方法。它只是接口类型的普通方法,但是如果 class C 有像 int call(int x) => ... 这样的调用方法,并且 c 有类型 C,那么 c(e2, e3) 也被转换为 c.call(e2, e3)。它必须是 call 方法 ,而不仅仅是 call getter 返回函数。