Метод получения указателя вызова с использованием адреса переменной - PullRequest
0 голосов
/ 23 октября 2019

Я изучаю приемник указателя и замечаю, что когда я вызываю метод, используя адрес переменной, я получаю ошибку ./prog.go:21:10: v.Scale(10) used as value

Я могу вызвать метод, используя только имя переменной или используя указатель. Я пытаюсь понять, почему Go жалуется, когда я вызываю, используя адрес переменной &v.Scale(10), когда метод ожидает указатель Vertex типа


import (
    "fmt"
)

type Vertex struct {
    X, Y float64
}

func (v *Vertex) Scale(f float64) {
    v.X = v.X * f
    v.Y = v.Y * f
}

func main() {
    v := Vertex{3, 4}
    var p *Vertex
    p=&v
    v.Scale(10)        //This works
    p.Scale(10)        //This works
    &v.Scale(10)       // This does not work
    fmt.Println(v)
}

1 Ответ

3 голосов
/ 23 октября 2019

Оператор

&v.Scale(10) 

является эквивалентом

&(v.Scale(10))

Компилятор жалуется, потому что v.Scale(10) используется в качестве значения.

Используйте это вместо:

(&v).Scale(10) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...