Rumah >pembangunan bahagian belakang >Golang >Penyataan pulangan tiada dalam gelung bersyarat
Dalam PHP, gelung for ialah struktur lelaran biasa yang digunakan untuk melaksanakan sekeping kod berulang kali. Walau bagaimanapun, kadangkala kita mungkin terlupa untuk menambah penyata pulangan dalam gelung bersyarat, yang akan menyebabkan atur cara gagal mengembalikan hasil seperti biasa. Dalam kes ini, editor PHP Yuzai mengesyorkan menyemak kod tepat pada masanya untuk memastikan penyataan pulangan yang sesuai ditambahkan pada gelung untuk mengelakkan ralat yang tidak dijangka. Ini boleh memastikan kebolehpercayaan dan ketepatan kod dan meningkatkan kecekapan dan kebolehselenggaraan program.
Saya perasan bahawa apabila saya menulis kod berikut, pengkompil menghasilkan missing return statements 错误
:
// Similar loops make sense in retry patterns // but this is just a simple example func TestMethod() int { for i := 0; i < 10; i++ { return 0 } }
Ini adalah apabila yang berikut disusun tanpa sebarang ralat:
func TestMethod() int { for { return 0 } }
Kod pertama secara logik dan teknikal baik kerana mustahil kaedah itu gagal dikembalikan. Adakah terdapat sebarang sebab mengapa pengkompil menunjukkan ralat ini? Atau adakah ia sejenis logik atau pepijat yang hilang?
Memperluaskan ulasan @Cerise Limón kepada jawapan, dakwaan bahawa "kod pertama... secara teknikalnya baik" adalah salah.
Spesifikasi bahasa Go mengatakan ini:
Jugadan ini:
(penekanan ditambah oleh saya)
Memeriksa kod dalam fungsi pertama, kita dapat melihat bahawa syarat spesifikasi ini tidak dipenuhi:
func TestMethod() int { for i:= 0; i < 10; i++ { return 0 } }
Fungsi mempunyai parameter hasil (int
返回值),因此必须以终止语句结束,但该函数的最终语句是 for
pernyataan dengan syarat , iaitu bukan "penyataan penamatan" seperti yang ditakrifkan oleh spesifikasi.
Ini mungkin kelihatan pelik, tetapi ia sebenarnya betul dari segi teknikal.
Jadi kenapa fungsi kedua okay?
func TestMethod() int { for { return 0 } }
Dalam kes ini, pernyataan akhir dalam fungsi ialah for
, di mana adalah tanpa syarat dan , tidak mempunyai pernyataan putus yang merujuk gelung for, memenuhi definisi spesifikasi bahasa bagi pernyataan penamat.
Ada logik dalam kerja anda.
Jika pernyataan for
语句包含 break
tanpa syarat mengandungi
Jika pernyataan for
语句不包含 break
(并且没有 return
tanpa syarat
mengandungi break
(dan tiada pernyataan return
), gelung itu tidak akan ditamatkan (sekurang-kurangnya bukan hasil daripada pelaksanaan biasa laluan) memerlukan nilai pulangan fungsi). break
语句是否可达; 它们只需要存在。例如即使 break
break
boleh dicapai 🎜mereka hanya perlu wujud🎜. Sebagai contoh, perkara berikut akan mencetuskan ralat kompilasi "missing return" walaupun break
jelas tidak boleh diakses: 🎜
func foo() int { for { if false { break } return 0 } // <-- error: missing return }
Atas ialah kandungan terperinci Penyataan pulangan tiada dalam gelung bersyarat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!