sja*_*obi 5 methods pointers go
我刚刚参加了Tour of Go中的练习51.该解释声称该Scale方法在接收到Vertex而不是指向a的指针时没有效果Vertex.
Scale
Vertex
然而,当我改变声明v := &Vertex{3, 4},以v := Vertex{3, 4}在main输出唯一的变化是丢失的&标记指针.
v := &Vertex{3, 4}
v := Vertex{3, 4}
main
&
那么为什么Scale即使变量不是指针也改变它收到的变量?
zzz*_*zzz 8
它没有"收到"一个值.Go是强类型的,因此如果在某处指定了指向T的指针,则指向T(*T)的指针是唯一可以作为此类型位置的值发生的选项.
*T
"魔术"在编译器中,在某些条件下有效地"重写"您的代码:
x.m()如果方法集(类型)x包含m且参数列表可以分配给参数列表,则方法调用有效m.如果x是可寻址的并且&x的方法集包含m,x.m()则是(&x).m():
x.m()
x
m
(&x).m()
相关:方法集
归档时间:
12 年,2 月 前
查看次数:
193 次
最近记录: