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

wur*_*iji 8 callable dart

我以某种方式发现该call()方法适用于每个函数。使用这种方法,我可以将我的更改if (callback != null) callback()callback?.call().

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

lrn*_*lrn 11

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

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

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