Bolehkah Anda Bandingkan Fungsi dalam Go?

DDD
Lepaskan: 2024-10-30 12:16:02
asal
766 orang telah melayarinya

Can You Compare Functions in Go?

Membandingkan Fungsi dalam Go

Dalam Go, nilai fungsi tidak boleh dibandingkan. Walau bagaimanapun, adalah mungkin untuk membandingkan alamat nilai fungsi, yang boleh berguna dalam senario tertentu.

Had Perbandingan Nilai Fungsi

Mengikut spesifikasi Go, "Nilai fungsi tidak boleh dibandingkan. " Ini bermakna anda tidak boleh membandingkan secara langsung dua nilai fungsi menggunakan operator perbandingan seperti == atau !=.

Membandingkan Alamat Nilai Fungsi

Untuk membandingkan alamat nilai fungsi, anda boleh menggunakan fmt Fungsi .Sprintf() untuk mendapatkan alamat fungsi. Pembolehubah p1 dan p2 dalam kod di bawah mengandungi alamat fungsi Undefined dan hand.Get.

<code class="go">p1 := fmt.Sprintf("%v", Undefined)
p2 := fmt.Sprintf("%v", hand.Get)</code>
Salin selepas log masuk

Anda kemudian boleh menggunakan operator == untuk membandingkan alamat nilai fungsi:

<code class="go">fmt.Println("Expecting true:", p1 == p2)</code>
Salin selepas log masuk

Perbandingan Alamat lwn. Pemfaktoran Semula

Walaupun secara teknikalnya mungkin untuk membandingkan alamat nilai fungsi, ini secara amnya bukan amalan yang baik. Nilai fungsi boleh berubah sepanjang hayat program, yang boleh menjadikan perbandingan alamat tidak boleh dipercayai.

Daripada membandingkan alamat nilai fungsi, lebih baik anda memfaktorkan semula kod anda untuk mengelakkan keperluan untuk perbandingan sedemikian. Contohnya, anda boleh mencipta peta nilai fungsi dan membandingkan kekunci untuk menentukan fungsi yang sedang digunakan.

Kaedah Alternatif Menggunakan Refleksi

Pilihan lain untuk membandingkan nilai fungsi ialah menggunakan pantulan. Kaedah reflect.Value.Pointer() membolehkan anda mendapatkan alamat nilai fungsi. Walau bagaimanapun, pendekatan ini juga tidak disyorkan kerana ia lebih kompleks dan terdedah kepada ralat daripada teknik perbandingan alamat yang diterangkan di atas.

Atas ialah kandungan terperinci Bolehkah Anda Bandingkan Fungsi dalam 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan