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 返回函数。
我不知何故发现 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 返回函数。