GolangCodingTime
GolangCodingTime copied to clipboard
c04/c04_02
能否讲一下这个函数类型的意义,不然为什么不直接调用想调用的函数,而要用函数类型去调用呢?这个在python和C++中都没有这种用法,为什么go要有这种用法呢?
能否讲一下这个函数类型的意义,不然为什么不直接调用想调用的函数,而要用函数类型去调用呢?这个在python和C++中都没有这种用法,为什么go要有这种用法呢?
函数在定义时,入参和返回,都要定好其类型。
常见的入参和返回,是对象。
但也有一些入参和返回,是函数,比如回调函数。
用这个来解释,不知道你好理解不?
能否讲一下这个函数类型的意义,不然为什么不直接调用想调用的函数,而要用函数类型去调用呢?这个在python和C++中都没有这种用法,为什么go要有这种用法呢?
问题是:函数本身可不可以被看成对象。 看起来是可以的,函数本身就是对象,通过函数与对象绑定形成方法,这样可以实现函数类型调用某个方法。
能否讲一下这个函数类型的意义,不然为什么不直接调用想调用的函数,而要用函数类型去调用呢?这个在python和C++中都没有这种用法,为什么go要有这种用法呢?
设计思维:函数可以调用函数,那么在java中都是直接this.anotherMethod(int someParams); 但是到了go里面,由于设计语言的 人员不一样,这些人似乎吸收了前端语言和其他语言的优势,然后可以设置函数做为参数传入,作为返回值返回函数,这本身想就是可以的。只是之前没有这样设计而已,函数作为参数传入,就可以在某些条件下去回调这个函数,比如说:
var(
status = 0; //0 代表饿;1代表吃饱
)
type check func(n int)
func (c check) eatMeal(food string) {
if(status ==1) {
fmt.Println(c(food))
}
fmt.Println("我正在吃:", food)
}
func sayNo(){
fmt.Println("我吃饱了")
}
func main() {
m := check(sayNo)
status = 1
m.eatMeal("苗条")
}
参考java中 lambda表达式思想
好处是可以对一个方法进行装饰。这里定义一个函数对象可以将符合该模式的函数重新包装,起到 aop 的作用