Kaedah Penunjuk pada Jenis Bukan Penunjuk
Jawapan kepada soalan sebelumnya menyatakan bahawa kaedah penunjuk hanya boleh digunakan pada penunjuk. Walau bagaimanapun, ini nampaknya tidak betul, seperti yang ditunjukkan oleh kod berikut yang berjaya memanggil kaedah penuding pada nilai bukan penuding:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Penjelasan
Penerangan kunci untuk memahami tingkah laku ini terletak pada hakikat bahawa penerima kaedah adalah penunjuk. Apabila anda memanggil c.fourWheels(), nilai penerima, c, adalah bukan penuding. Walau bagaimanapun, memandangkan jenis penerima ialah penunjuk, ini ditafsirkan sebagai singkatan untuk (&c).fourWheels().
Mengikut spesifikasi Go, apabila memanggil kaedah, jika nilai penerima boleh dialamatkan dan jenis penerima adalah penunjuk, panggilan kaedah ditafsirkan sebagai panggilan kaedah penunjuk. Dalam kes kami, nilai penerima c boleh dialamatkan dan jenis penerima *kereta ialah penunjuk, jadi panggilan kaedah c.fourWheels() secara berkesan memanggil (&c).fourWheels().
Tingkah laku ini ialah konsisten dengan pernyataan bahawa kaedah nilai boleh digunakan pada penunjuk dan nilai, manakala kaedah penunjuk hanya boleh digunakan pada penunjuk. Dalam kes kaedah penunjuk, jika nilai penerima bukan penunjuk, ia mesti dinyahrujuk untuk mendapatkan nilai penunjuk yang boleh digunakan sebagai penerima.
Atas ialah kandungan terperinci Bolehkah Kaedah Penunjuk Dipanggil pada Nilai Bukan Penunjuk dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!