Metodlar va pointer'lar orqali murojaat (2)
Xuddi shunga o'xshash narsa teskari yo'nalishda ham ro'y beradi.
Qiymat argumentli funksiyalar aynan shu tipdagi qiymatni qabul qilishi shart:
var v Vertex
fmt.Println(AbsFunc(v)) // OK
fmt.Println(AbsFunc(&v)) // Kompilyatsiya xatosi!
Qiymat receiver'li metodlar esa chaqirilganda receiver sifatida qiymatni ham, pointer'ni ham qabul qiladi:
var v Vertex
fmt.Println(v.Abs()) // OK
p := &v
fmt.Println(p.Abs()) // OK
Bu holatda p.Abs() metod chaqiruvi (*p).Abs() deb talqin qilinadi.
Yechimni kodning pastki qismidagi
Topshiriqlarbo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.
Vertex uchun qiymat receiver'li Yigindi() float64 metodini yozing: X + Y ni qaytarsin. Uni qiymatda ham, pointer'da ham chaqirsa bo'lishini tekshiring.
KvadratUzunlik(v Vertex) float64 funksiyasini yozing: X*X + Y*Y ni qaytarsin. Funksiya qiymat kutgani uchun, pointer p da uni KvadratUzunlik(*p) shaklida chaqirish kerak.