Rumah > pembangunan bahagian belakang > Golang > Mengapa Saya Tidak Boleh Memanggil Kaedah Penunjuk pada Hasil Panggilan Fungsi Go?

Mengapa Saya Tidak Boleh Memanggil Kaedah Penunjuk pada Hasil Panggilan Fungsi Go?

Patricia Arquette
Lepaskan: 2024-12-19 10:08:15
asal
997 orang telah melayarinya

Why Can't I Call a Pointer Method on the Result of a Go Function Call?

Memahami Ralat "Tidak Boleh Mengambil Alamat" dan "Tidak Boleh Menghidupkan Kaedah Penunjuk Panggil"

Apabila bekerja dengan Go, seseorang mungkin menghadapi ralat seperti "tidak boleh mengambil alamat" atau "tidak boleh memanggil kaedah penunjuk," mengelirukan mereka yang mempelajarinya bahasa.

Isu:

Pertimbangkan kod Go berikut:

diff := projected.Minus(c.Origin)
dir := diff.Normalize() // error: cannot call pointer method on Vector3

// Vector3 methods
func (a *Vector3) Minus(b Vector3) Vector3 { ... }
func (a *Vector3) Normalize() Vector3 { ... }
Salin selepas log masuk

Barisan kedua menyebabkan ralat kompilasi kerana Vector3.Normalize() memerlukan penerima penunjuk, bermakna ia mengharapkan penunjuk kepada nilai Vector3 (*Vector3) dan bukannya Vector3 nilai.

Mengapa ia Berlaku:

Nilai pengembalian fungsi dan panggilan kaedah tidak boleh dialamatkan dalam Go. Oleh itu, dalam contoh kedua, pengkompil tidak boleh mengambil alamat hasil Vector3.Minus(), menghalangnya daripada memanggil Normalize() pada nilai tersebut.

Mungkin Penyelesaian:

  • Asingkan Tugasan: Berikan nilai pulangan kepada pembolehubah dan panggil kaedah padanya pembolehubah, seperti yang dilihat dalam contoh pertama di mana dir = diff.Normalize() berfungsi.
  • Tukar Jenis Penerima: Ubah suai kaedah Normalize() untuk mempunyai penerima nilai (Vector3 dan bukannya * Vektor3). Ini membenarkan panggilan kaedah rantaian pada nilai bukan penuding.
  • Penunjuk Pulangan: Jadikan Normalize() mengembalikan penunjuk (*Vector3) untuk mengelakkan keperluan menangani nilai pulangan.
  • Buat Fungsi Pembantu: Cipta fungsi untuk mengembalikan alamat sesuatu nilai, seperti pv(v) untuk mengembalikan &v, dan memanggil Normalize() pada hasilnya.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memanggil Kaedah Penunjuk pada Hasil Panggilan Fungsi Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan