回调函数就是一个通过函数指针调用的函数。【真正的函数实现】
如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。【被传递的那个函数】
回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。【调用方是其他函数,不是实现方。】
type A struct{
func f1() int{
return 0
}
}
type Callback func() int
type B struct{
}
func (b *B) f2(f1 Callback){
f1() //形参:这里可以直接调用函数,而不用再重新创建A的对象,再通过a.f1()调用了!
}
func main(){
B b:=B{}
A a:=A{}
b.f2(a.f1) //实参:但实参传入的是a.f1(),仍然需要传递a进去的!
}
/*
回调,相当于,把传统写法的传递对象,变成了传递函数,把函数的类型、函数的实现(包括其所在的结构体类型)拆开了。
回调时,在写B.f2()时,不需要确定A的类型,只需要确定A.f1()的类型就行。
而传统写法是,早在写B.f2时,就要确定A的类型。
*/
————————————————————
// 不用回调:传统写法
func (b *B) f2(a A){
a.f1()
}
作者:西伯尔
出处:http://www.cnblogs.com/sybil-hxl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号