Metodlar va pointer'lar orqali murojaat
Oldingi ikki dasturni solishtirib, pointer argumentli funksiyalar pointer'ni qabul qilishi shartligini payqagan bo'lishingiz mumkin:
var v Vertex
ScaleFunc(v, 5) // Kompilyatsiya xatosi!
ScaleFunc(&v, 5) // OK
Pointer receiver'li metodlar esa chaqirilganda receiver sifatida qiymatni ham, pointer'ni ham qabul qiladi:
var v Vertex
v.Scale(5) // OK
p := &v
p.Scale(10) // OK
v.Scale(5) chaqiruvida v pointer emas, qiymat bo'lsa ham, pointer receiver'li metod avtomatik chaqiriladi.
Ya'ni, qulaylik uchun Go
v.Scale(5)chaqiruvini,Scalemetodi pointer receiver'ga ega bo'lgani sababli,(&v).Scale(5)deb talqin qiladi.
Yechimni kodning pastki qismidagi
Topshiriqlarbo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.
Vertex uchun pointer receiver'li Yarim() metodini yozing: ikkala koordinatani ikkiga bo'lsin. Uni ham qiymatda (v.Yarim()), ham pointer'da (p.Yarim()) chaqirib ko'ring — ikkalasi ham ishlaydi.
Ikkilash(p *Vertex) funksiyasini yozing: pointer orqali ikkala koordinatani ikki baravar oshirsin (ScaleFunc(p, 2) dan foydalanishingiz mumkin).