回调函数(callback)是什么?
一个常见的定义:由自己定义、由系统调用的函数,称为回调函数。
上层/底层的概念:系统提供的,通常称为底层,如Windows SDK的API。自己写的代码,称为上层。一般是上层调用下层,如调用API监视键盘。Callback的特殊之处是,你写的函数,由下层来调用。
为什么会理解困难:我通常把这原因归为,翻译的“回调”,太烂。语言阻碍了理解。
一种应用场景:
你是上层,我是下层。我写函数,你调用。注意,现在我写了一个函数,里面有一个死循环。当然不用担心,这个死循环是从摄像头抓帧的,你随时可以按Esc退出。
我对抓到的每帧,检测图像里目标。这里假设目标是草莓。所以,问题简化成:【我摘草莓,你吃草莓,我为你服务(调用)】。
刚开始,你拿到草莓直接鲜吃,所以,把草莓交给【吃草莓】接口;
后来,你吃不完,想用草莓做酱,所以,把草莓交给【草莓酱】接口;
再后来,你想把草莓做沙拉,所以,把草莓传给【做沙拉】接口;
……
两个问题:
1. 你的需求经常变化。
2. 别人可能用这个摘草莓的接口。
所以,大家决定商量一下,你别叫(调用)我了,我叫(调用)你吧。
把你的各种接口交(传递)给我,我摘到草莓(预处理)后,再调你的接口。
所以,事情变成了:原来,我在下你在上,是通常的传教士;后来觉得麻烦,
我在上,你在下,变成了观音坐莲。这个特殊,叫做Callback。
最后:
如果你也遇到过这种死循环的接口,你会发现,其实传教士根本做不成。因
为你一旦调用我,我就停不下来了……如何把摘到的草莓扔给你?除了Callback,
就得是内存共享之类。
本来是很简单的理解,写出来有点多。照顾非程序员人群,写的更多。总得来说,
上层/底层的概念:系统提供的,通常称为底层,如Windows SDK的API。自己写的代码,称为上层。一般是上层调用下层,如调用API监视键盘。Callback的特殊之处是,你写的函数,由下层来调用。
为什么会理解困难:我通常把这原因归为,翻译的“回调”,太烂。语言阻碍了理解。
一种应用场景:
你是上层,我是下层。我写函数,你调用。注意,现在我写了一个函数,里面有一个死循环。当然不用担心,这个死循环是从摄像头抓帧的,你随时可以按Esc退出。
我对抓到的每帧,检测图像里目标。这里假设目标是草莓。所以,问题简化成:【我摘草莓,你吃草莓,我为你服务(调用)】。
刚开始,你拿到草莓直接鲜吃,所以,把草莓交给【吃草莓】接口;
后来,你吃不完,想用草莓做酱,所以,把草莓交给【草莓酱】接口;
再后来,你想把草莓做沙拉,所以,把草莓传给【做沙拉】接口;
……
两个问题:
1. 你的需求经常变化。
2. 别人可能用这个摘草莓的接口。
所以,大家决定商量一下,你别叫(调用)我了,我叫(调用)你吧。
把你的各种接口交(传递)给我,我摘到草莓(预处理)后,再调你的接口。
所以,事情变成了:原来,我在下你在上,是通常的传教士;后来觉得麻烦,
我在上,你在下,变成了观音坐莲。这个特殊,叫做Callback。
最后:
如果你也遇到过这种死循环的接口,你会发现,其实传教士根本做不成。因
为你一旦调用我,我就停不下来了……如何把摘到的草莓扔给你?除了Callback,
就得是内存共享之类。
本来是很简单的理解,写出来有点多。照顾非程序员人群,写的更多。总得来说,
能问这个问题,说明你还没入门,目前这样理解,够了。
from 知乎
Keep it simple!