type T struct { Tp int}func (t T) Set(a int) { t.Tp = a}func main() { t := T{} fmt.Println(reflect.TypeOf(t.Set)) fmt.Println(reflect.TypeOf(T.Set))}result :func(int)func(main.T, int)为什么 T.set 不等于 t.set?什么是原则或翻译?http://play.golang.org/p/xYnWZ3PlyF
1 回答
翻翻过去那场雪
TA贡献2065条经验 获得超14个赞
t.Set 是一个方法值。T.Set 是一个方法表达式。
方法值t.Set产生一个等价于的函数:
func(a int) ( t.Set(a) }
方法表达式T.Set产生一个函数,该函数等效于以接收者作为第一个参数的方法。
func(t T, a int) { t.Set(a) }
这个Playground 示例说明了方法值和方法表达式之间的区别。
与关于方法表达式和方法值的讨论不同,函数 Set 应该接受一个指针接收器。否则,对 t 的更改将被丢弃。
func (t *T) Set(a int) {
t.Tp = a
}
这是指针接收器的示例。
- 1 回答
- 0 关注
- 208 浏览
添加回答
举报
0/150
提交
取消