Rumah >pembangunan bahagian belakang >Golang >Mengapa Kaedah Go dengan Penerima Penunjuk Nampaknya Mengubah Suai Nilai Bukan Penunjuk?
Kaedah dengan Penerima Penunjuk
Dalam Tour of Go, Latihan 51 meneroka penerima kaedah. Penjelasan yang diberikan menyatakan bahawa kaedah Skala, yang beroperasi pada penunjuk ke Puncak, tidak mempunyai kesan apabila ia menerima nilai Pucuk secara langsung. Walau bagaimanapun, mengubah suai fungsi utama untuk menghantar Vertex bukan penuding bercanggah dengan pernyataan ini.
Mengapa Percanggahan?
Walaupun kod menerima nilai bukan penuding, Skala berjaya mengubah suai pembolehubah. Tingkah laku ini boleh dikaitkan dengan sistem menaip Go yang kuat. Apabila penunjuk kepada T dijangka dalam konteks tertentu, hanya penunjuk kepada T (*T) boleh memenuhi keperluan tersebut.
Pengkompil menggunakan transformasi di belakang tabir untuk membolehkan tingkah laku ini:
"Panggilan kaedah x.m() adalah sah jika set kaedah (jenis) x mengandungi m dan senarai argumen boleh diberikan kepada senarai parameter m. Jika x ialah boleh dialamatkan dan set kaedah &x mengandungi m, x.m() ialah singkatan untuk (&x).m():"
Pada dasarnya, pengkompil menulis semula kod untuk menghantar penunjuk kepada nilai bukan penunjuk apabila penerima pembolehubah mempunyai jenis penerima penunjuk. Ini membolehkan kaedah Skala mengubah suai pembolehubah asal.
Atas ialah kandungan terperinci Mengapa Kaedah Go dengan Penerima Penunjuk Nampaknya Mengubah Suai Nilai Bukan Penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!