Go 语言的func 匿名函数,func类型的属性

今天看了个源码,发现一个写法

在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+" 执行了;\n")
}

func main() {
	class := Class{func(s string, i int, class Class) (string, int) {
		return s+class.signalString+"-yes\n", 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类型的属性归根到底还是属性,不是方法,这个还是有根本区别的。

 

posted @ 2021-06-03 18:41  华腾海神  阅读(1051)  评论(0编辑  收藏  举报