什么是回调方法?

noo*_*_00 25 language-agnostic methods callback

我是一个编程菜鸟,并不太了解回调方法背后的概念.尝试在维基中阅读它并且它超越了我的头脑.有人可以用简单的语言解释一下吗?

Kar*_*tel 21

回调是你传递给函数的东西,它告诉它在它的操作中的某个点应该调用什么.函数中的代码决定何时调用函数(以及要传递的参数).通常,执行此操作的方法是将函数本身作为"回调"传递,在函数为对象的语言中.在其他语言中,您可能必须传递一种称为"函数指针"(或类似)的特殊事物; 或者您可能必须传递函数的名称(然后在运行时查找).

一个简单的例子,在Python中:

void call_something_three_times(what_to_call, what_to_pass_it):
    for i in xrange(3): what_to_call(what_to_pass_it)

# Write "Hi mom" three times, using a callback.
call_something_three_times(sys.stdout.write, "Hi mom\n")
Run Code Online (Sandbox Code Playgroud)

这个例子让我们将重复函数调用的任务与实际调用函数的任务分开.这不是很有用,但它证明了这个概念.

在现实世界中,回调被广泛用于线程库之类的东西,在这里你可以使用描述线程将要完成的工作的回调调用一些线程创建函数.线程创建函数执行必要的工作来设置线程,然后安排新线程调用回调函数.


Cra*_*lus 11

维基说:

在计算机编程中,回调是对可执行代码或一段可执行代码的引用,它作为参数传递给其他代码.这允许较低级别的软件层调用在较高级别层中定义的子例程(或函数).

通常,它是一种通知一段代码的机制,即一种方法,即在需要时执行哪一段代码,即另一种方法.
回调与以下事实有关:调用函数的客户端指定一个函数,该函数属于客户端代码对要执行的调用函数的责任,并将其作为参数传递.
一个例子是在GUI中.作为参数传递一个事件发生时要调用的函数(例如按下按钮),一旦事件发生,就调用该函数.
此函数通常由最初为事件注册的对象实现


0xA*_*xAX 5

回调函数是通过函数指针调用的函数.如果将函数的指针(地址)作为参数传递给另一个,当该指针用于调用它指向的函数时,则表示进行了回调.

为什么要使用回调函数?

回调可用于通知.例如,您需要在应用程序中设置计时器.每次计时器到期时,都必须通知您的申请.但是,时间机制的实现者对您的应用程序一无所知.它只需要一个指向具有给定原型的函数的指针,并且在使用该指针时它会进行回调,通知应用程序有关已发生的事件.实际上,SetTimer()WinAPI使用回调函数来通知计时器已过期(并且,如果没有提供回调函数,它会将消息发布到应用程序的队列).

  • @Ignacio:任何允许回调的语言都会有某种形式的函数指针.它可能隐藏在界面或虚拟,重载,覆盖(或语言设计者想要称之为的任何语言)功能的幌子后面,但是沿着这条线的某处会有一个"跳跃"或"调用"命令.目标来自ram中的变量而不是程序集中的硬编码(无论是VM"汇编"代码还是cpu汇编代码). (3认同)