今天看了个源码,发现一个写法
在python里面是可以在类定义之外额外负值新的方法的,Go语言中,定义结构体struct的时候好像只能定义属性,方法要通过方法名前传入struct引用的方式来将方法和结构体绑在一起,从而实现类似于Java,python中类的形式。
但是能不能在定义结构体的时候就定义好方法呢,在这个源码里就看到了可行的实现方式,即通过匿名函数(其实就是定义func类型的属性,好理解)
比如有下面的代码,
package main
type Class struct {
method func(string, int, Class) (string, int)
signalString string
}
func (c *Class) Func() {
print(c.signalString+" 执行了;
")
}
func main() {
class := Class{func(s string, i int, class Class) (string, int) {
return s+class.signalString+"-yes
", i+100
}, "super"};
signS, signI := class.method("got?", 12, class)
class.Func()
print(signS)
print(signI)
}
执行后:
super 执行了; got?super-yes 112
说白了都一样,可执行的属性也就是方法,go里面又没有this,只有struct参数,不同的地方在于定义方法可以不传调用者,使用func属性需要传入调用者,func类型的属性归根到底还是属性,不是方法,这个还是有根本区别的。