Dart函数的call方法

1,426 阅读1分钟

概述

在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