用对象调用指针接收器的方法而不是指向它的指针?

时间:2016-07-20 12:32:24

标签: function pointers go methods call

class FooClass { MyClass<? extends Map<String, List<? extends Serializable>>> fooField; } Type的对象,v是指向Vertex的指针的方法。那么为什么Scale没有错,因为Vertex不是指向v.Scale(10)对象的指针?感谢。

v

2 个答案:

答案 0 :(得分:8)

Spec: Calls:

  

如果x.m() x的{​​{3}}包含m并且参数列表可以分配给m,则方法调用x有效。 {1}}。如果&xmethod setm的方法集包含x.m(),则 (&x).m()Scale() 的简写。

编译器发现v有一个指针接收器,并且v.Scale(10)是可寻址的(因为它是一个局部变量),因此(&v).Scale(10)将被解释为DialogFragment

这只是规范为您提供的众多便利之一,因此源代码可以保持干净。

答案 1 :(得分:2)

这是Go自动解除引用:

来自https://golang.org/ref/spec#Method_values

  

与选择器一样,使用指针对带有值接收器的非接口方法的引用将自动取消引用该指针:pt.Mv等效于(* pt).Mv。