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

结构上方法的参数传递语义是否完全由方法决定,而不是由调用者决定?

结构上方法的参数传递语义是否完全由方法决定,而不是由调用者决定?

Go
DIEA 2021-10-18 16:10:56
考虑下面的简单程序,我们在指向结构的指针上定义一个方法Vertex,然后用一个指针调用它。package mainimport (    "fmt")type Vertex struct {    X, Y float64}func (v *Vertex) Mutate()  {    v.X = 8}func main() {    v := &Vertex{3, 4}    v.Mutate()    fmt.Println(v.X)}这个程序的输出是8,这是我们期望的,因为我们将一个指针传递给一个接受一个指针的方法。但是,以下调用的输出也为 8。func main() {    v := Vertex{3, 4}    v.Mutate()    fmt.Println(v.X)}对称地,如果我们重新定义方法Mutate以采用 aVertex而不是指针,那么无论传递的是指针还是结构体,突变都会失败。这种行为似乎意味着参数v或指向v传递的指针完全取决于方法的定义,而不是实际传递的内容。这是一个正确的解释吗,情况总是这样吗?如果不是,对这种行为的正确解释是什么?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

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