fbpx
维基百科

回调函数

计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过參數函式传递到其它代码的,某一块可执行代码引用。这一设计允许了底层代码调用在高层定义的子程序

回调通常与原始调用者处于相同的抽象层

使用

回调的用途十分广泛。例如,假设有一个函数,其功能为读取配置文件并由文件内容设置对应的选项。若这些选项由散列值所标记,则让这个函数接受一个回调会使得程序设计更加灵活:函数的调用者可以使用所希望的散列算法,该算法由一个将选项名转变为散列值的回调函数实现;因此,回调允许函数调用者在运行时调整原始函数的行为。

回调的另一种用途在于处理信号或者类似物。例如一个POSIX程序可能在收到SIGTERM信号时不愿立即终止;为了保证一切运行良好,该程序可以将清理函数注册为SIGTERM信号对应的回调。

回调亦可以用于控制一个函数是否作为:Xlib允许自定义的谓词用于决定程序是否希望处理特定的事件。

例子

下列C语言代码描述了利用回调处理POSIX风格的信号(在本示例中为SIGUSR1)的过程。值得注意的是,在处理信号的过程中,调用printf(3)不安全的

#include <stdio.h> #include <signal.h> #include <unistd.h> void sig(int signum) {  printf("Received signal number %d!\n", signum); } int main(int argc, char *argv[]) {  signal(SIGUSR1, sig);  pause();    return 0; } 

系统调用pause(3)会导致这个例子不做任何有意义的事,但这样做可以给你充分的时间来给这个进程发送信号。(在类Unix系统上,可以调用kill -USR1 <pid>,其中<pid>代表该程序的进程号。运行之后,该程序应当会有反应。)

实现

回调的形式因程序设计语言而有差别。

  • Objective-C中允许利用@selector关键字传递SEL类型的函数名。在实现中,SEL类型被定义为函数名字符串。
  • .NET语言中用到的事件与事件处理函数提供了用于回调的通用语法。
  • Apple或是LLVM的C语言扩展中,包含称为的语言特性,可以作为函数的参数传递,作为回调的一种实现。
  • 在缺少函数类型的参数的面向对象的程序语言中,例如Java,回调可以用传递抽象类或接口来模拟。回调的接收者会调用抽象类或接口的方法,这些方法由调用者提供实现。这样的对象通常是一些回调函数的集合,同时可能包含它所需要的数据。这种方法在实现某些设计模式时比较有用,例如访问者模式观察者模式策略模式
  • C++允许对象提供其自己的函数调用操作的实现,即重载operator()。标准模板库和函数指针一样接受这类对象(称为函数对象)作为各种算法的参数。

参见

  • 續延傳遞風格英语Continuation-passing style
  • 信號和槽英语Signals and slots
  • 事件驱动程式设计
  • libsigc++英语libsigc++, C++的回调库
  • 控制反转

外部链接

参考资料

  1. ^ Perl Cookbook - 11.4. Taking References to Functions. [2008-03-03]. (原始内容于2008-04-10). 
  2. ^ Advanced Perl Programming - 4.2 Using Subroutine References. [2008-03-03]. (原始内容于2008-07-05). 

回调函数, 在计算机程序设计中, 或简称回调, callback, 即call, then, back, 被主函数调用运算后会返回主函数, 是指通过參數將函式传递到其它代码的, 某一块可执行代码的引用, 这一设计允许了底层代码调用在高层定义的子程序, 回调通常与原始调用者处于相同的抽象层, 目录, 使用, 例子, 实现, 参见, 外部链接, 参考资料使用, 编辑回调的用途十分广泛, 例如, 假设有一个函数, 其功能为读取配置文件并由文件内容设置对应的选项, 若这些选项由散列值所标记, 则让这个函数接受一个回调会使得. 在计算机程序设计中 回调函数 或简称回调 Callback 即call then back 被主函数调用运算后会返回主函数 是指通过參數將函式传递到其它代码的 某一块可执行代码的引用 这一设计允许了底层代码调用在高层定义的子程序 回调通常与原始调用者处于相同的抽象层 目录 1 使用 2 例子 3 实现 4 参见 5 外部链接 6 参考资料使用 编辑回调的用途十分广泛 例如 假设有一个函数 其功能为读取配置文件并由文件内容设置对应的选项 若这些选项由散列值所标记 则让这个函数接受一个回调会使得程序设计更加灵活 函数的调用者可以使用所希望的散列算法 该算法由一个将选项名转变为散列值的回调函数实现 因此 回调允许函数调用者在运行时调整原始函数的行为 回调的另一种用途在于处理信号或者类似物 例如一个POSIX程序可能在收到SIGTERM信号时不愿立即终止 为了保证一切运行良好 该程序可以将清理函数注册为SIGTERM信号对应的回调 回调亦可以用于控制一个函数是否作为 Xlib允许自定义的谓词用于决定程序是否希望处理特定的事件 例子 编辑下列C语言代码描述了利用回调处理POSIX风格的信号 在本示例中为SIGUSR1 的过程 值得注意的是 在处理信号的过程中 调用 a href Printf html class mw redirect title Printf printf 3 a 是不安全的 include lt stdio h gt include lt signal h gt include lt unistd h gt void sig int signum printf Received signal number d n signum int main int argc char argv signal SIGUSR1 sig pause return 0 系统调用pause 3 会导致这个例子不做任何有意义的事 但这样做可以给你充分的时间来给这个进程发送信号 在类Unix系统上 可以调用kill USR1 b lt pid gt b 其中 b lt pid gt b 代表该程序的进程号 运行之后 该程序应当会有反应 实现 编辑回调的形式因程序设计语言而有差别 C C 和Pascal允许将函数指针作为参数传递给其它函数 其它语言 例如JavaScript Python Perl 1 2 和PHP 允许简单的将函数名作为参数传递 Objective C中允许利用 selector关键字传递SEL类型的函数名 在实现中 SEL类型被定义为函数名字符串 在类似于C 与VB NET的运用 NET Framework的语言中 提供了一种型别安全的引用封装 所谓的 委托 用来定义包含类型的函数指针 可以用于实现回调 NET语言中用到的事件与事件处理函数提供了用于回调的通用语法 函数式编程语言通常支持第一级函数 可以作为回调传递给其它函数 也可以作为数据类型存储或是返回给其它函数 某些语言 比如Algol 68 Perl 新版本的 NET语言以及多数函数式编程语言中 允许使用匿名的代码块 lambda表达式 用以代替在别处定义的独立的回调函数 在Apple或是LLVM的C语言扩展中 包含称为块的语言特性 可以作为函数的参数传递 作为回调的一种实现 在缺少函数类型的参数的面向对象的程序语言中 例如Java 回调可以用传递抽象类或接口来模拟 回调的接收者会调用抽象类或接口的方法 这些方法由调用者提供实现 这样的对象通常是一些回调函数的集合 同时可能包含它所需要的数据 这种方法在实现某些设计模式时比较有用 例如访问者模式 观察者模式与策略模式 C 允许对象提供其自己的函数调用操作的实现 即重载operator 标准模板库和函数指针一样接受这类对象 称为函数对象 作为各种算法的参数 参见 编辑續延傳遞風格 英语 Continuation passing style 信號和槽 英语 Signals and slots 事件驱动程式设计 libsigc 英语 libsigc C 的回调库 控制反转外部链接 编辑Style Case Study 2 Generic Callbacks 页面存档备份 存于互联网档案馆 C Callback Solution 页面存档备份 存于互联网档案馆 Basic Instincts Implementing Callback Notifications Using Delegates Implement Script Callback Framework in ASP NET Implement callback routines in Java Interfacing C member functions with C libraries参考资料 编辑 Perl Cookbook 11 4 Taking References to Functions 2008 03 03 原始内容存档于2008 04 10 Advanced Perl Programming 4 2 Using Subroutine References 2008 03 03 原始内容存档于2008 07 05 取自 https zh wikipedia org w index php title 回调函数 amp oldid 63790170, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。