Penilaian Fungsi dalam Pernyataan Bersyarat
Pernyataan bersyarat selalunya memerlukan penilaian fungsi dalam keadaannya. Walau bagaimanapun, bahasa pengaturcaraan Go mengenakan keperluan khusus apabila cuba menggunakan panggilan fungsi sebagai nilai dalam pernyataan tersebut. Untuk memahami perkara ini dengan lebih baik, pertimbangkan contoh berikut:
package main import "fmt" func main() { if sumThis(1, 2) > sumThis(3, 4) { fmt.Println("test") } else { fmt.Println("derp") } } func sumThis(a, b int) { return a + b }
Coretan kod ini cuba membandingkan hasil dua panggilan fungsi dalam pernyataan bersyarat. Walau bagaimanapun, ia gagal untuk menyusun, menghasilkan ralat berikut:
./test4.go:4: sumThis(1, 2) used as value ./test4.go:4: sumThis(3, 4) used as value ./test4.go:11: too many arguments to return
Ralat berpunca daripada ketiadaan jenis pulangan untuk fungsi sumThis. Dengan mengecualikan jenis pemulangan, Go mentafsirkan fungsi sebagai pemulangan tidak sah. Apabila anda kemudian cuba menggunakan panggilan fungsi sebagai nilai dalam pernyataan bersyarat, pengkompil tidak menemui jenis pemulangan dan menganggap panggilan seperti yang digunakan untuk kesan sampingannya dan bukannya nilai pemulangannya.
Untuk menyelesaikan isu ini, anda mesti mengisytiharkan jenis pulangan untuk fungsi anda secara eksplisit. Dalam kes ini, memandangkan fungsi sumThis mengembalikan integer, tandatangannya hendaklah:
func sumThis(a, b int) int { // ... }
Dengan tandatangan fungsi yang betul di tempatnya, kod akan berjaya menyusun dan betul membandingkan nilai pulangan panggilan fungsi dalam pernyataan bersyarat.
Atas ialah kandungan terperinci Bagaimanakah Saya Menggunakan Panggilan Fungsi dengan Betul dalam Pernyataan Bersyarat Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!