概述
在Dart中,所有函数其实都是Function类型的对象,因为Dart是一种纯粹的面向对象语言。跟通常的类相似,函数(类)本身有调用方法,此调用方法为call()。众所周知,调用方法的作用是调用一个函数,比如someFunction()就是调用someFunction这个函数,在Dart中someFunction.call()的作用和someFunction()是一样的。事实上,当一个Dart函数(Function类型的对象对象)被调用时,编译器会检查该对象是否有一个调用方法。
//所有函数内部都有一个call方法
Function {
call();
}
Function的call方法
通过显式地包含调用方法,可以将函数编写为类。就像编写通常的类一样,可以拥有并初始化函数的私有成员。
- 代码: 在下面的例子中,我们有动物行为的方法。使用AnimalAction函数,我们可以通过以下方式设置自定义动物行为:
final AnimalAction animal = AnimalAction('water');
每次我们在这个实例之后使用animal时,它都会使用我们的自定义动物行为’water‘。请注意我们的AnimalAction类是如何像函数一样工作的。这是因为它使用了内部的调用方法call。
我们通过调用someFunction函数来展示处理函数。请注意使用someFunction('func')和someFunction.call('func')可以达到相同的效果,即使someFunction没有显式地声明调用方法。
import 'dart:convert';
String someFunction(String param) {
return "handle " + param;
}
//========================= 等同于
class AnimalAction implements Function {
String _action;
AnimalAction(this._action);
call(String animalName) {
print(animalName + ' ' + _action);
}
}
void main() {
final AnimalAction animal = AnimalAction('water');
animal('a dog');
animal.call('a big');
print(someFunction("param"));
print(someFunction.call("param"));
}
----------------------
flutter: a dog water
flutter: a big water
flutter: handle param
flutter: handle param