回调函数(callback)

参考*链接:

  1. 中文:http://zh.wikipedia.org/wiki/%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0
  2. 英文:http://en.wikipedia.org/wiki/Callback_(computer_programming)

回调函数(callback)
回调通常与原始调用者处于相同的抽象层

回调函数的意义在于底层library代码中,需要调用函数,但这些函数无法在library阶段确定,所以要在application阶段由用户来定义。回调机制允许调用者在实际应用程序编写中调整底层library函数的行为。

这种机制使得library函数无法完全成为一个封闭的系统,必然一些工具的设计中带了挑战和研究点。

这种情况在很多语言中都用例子,最典型的是OO语言中,很多设计模式中需要用到回调机制。

例子:

  • 最早的例子应该就是Unix中的“信号”机制:
    例如下面代码中,当程序接收到信号SIGUSR1时,将回调函数sig。
    void sig(int signum)
    {
            printf("Received signal number %d!\n", signum);
    }
    signal(SIGUSR1, sig);
  • JavaScript:几乎所有JS的程序中都用到了callback机制。
  • Java:在我的研究中,目前关心Java的回调(回调广泛用于Swing和Android程序设计),例如addEventListener等

语言机制:

很多语言都提供了一些特殊的语言机制来支持回调,详见这里

  • C/C++/Pascal:函数指针(function pointer)作为参数传入函数
  • JavaScript, Lua, Python, Perl, PHP:函数对象(function object)作为参数传入函数
  • C++:C++还可以通过重载括号,也就是重载函数调用操作符,来实现生成函数对象(C++ allows objects to provide their own implementation of the function call operation)

回调函数(callback)

上一篇:AndroidBDMap学习05:连续定位地图


下一篇:Visio2013简体中文版下载及安装教程