为了账号安全,请及时绑定邮箱和手机立即绑定

方法接收者的歧义

方法接收者的歧义

Go
翻过高山走不出你 2021-05-13 17:43:02
今天就去旅行。我注意到我可以将结构体字面量传递给与结构体指针关联的方法,反之亦然。为什么允许这样做?package mainimport (    "fmt")type Vertex struct {    X, Y float64}func (v Vertex) Scale (f float64) {    v.X = v.X * f    v.Y = v.Y * f}func (v *Vertex) ScaleP(f float64) {    v.X = v.X * f    v.Y = v.Y * f}func main() {    v := &Vertex{3, 4}    vLiteral := Vertex{3, 4}    v.Scale(5)    fmt.Println(v)    v.ScaleP(5)    fmt.Println(v)    vLiteral.Scale(5)    fmt.Println(vLiteral)    vLiteral.ScaleP(5)    fmt.Println(vLiteral)}输出:&{3 4}&{15 20}{3 4}{15 20}
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

请参阅方法集

一个类型可能具有与之关联的方法集(§接口类型,§Method声明)。接口类型的方法集是其接口。任何其他类型T的方法集都包含具有接收者类型T的所有方法。相应指针类型* T的方法集是具有接收者* T或T的所有方法的集合(也就是说,它也包含具有* T或T的方法集。 T)。进一步的规则适用于包含匿名字段的结构,如有关结构类型的部分中所述。其他任何类型的方法集都为空。在方法集中,每个方法必须具有唯一的方法名称。

类型的方法集确定该类型实现的接口以及可以使用该类型的接收器调用的方法。

编辑:

另请参阅电话

如果x的方法集包含m并且可以将参数列表分配给m的参数列表,则方法调用xm()是有效的。如果x是可寻址的并且&x的方法集包含m,则xm()是(&x).m()的简写:


查看完整回答
反对 回复 2021-05-31
  • 1 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信