Jadual Kandungan
Kandungan soalan
Penyelesaian
Bahan Bonus
Rumah pembangunan bahagian belakang Golang Penyataan pulangan tiada dalam gelung bersyarat

Penyataan pulangan tiada dalam gelung bersyarat

Feb 09, 2024 pm 12:30 PM
Ralat kompilasi

带条件的 for 循环中缺少 return 语句

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.

Kandungan soalan

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
    }
}
Salin selepas log masuk

Ini adalah apabila yang berikut disusun tanpa sebarang ralat:

func TestMethod() int {
    for {
        return 0
    }
}
Salin selepas log masuk

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?

Penyelesaian

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
    }
}
Salin selepas log masuk

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.

Bahan Bonus

Jadi kenapa fungsi kedua okay?

func TestMethod() int {
    for {
        return 0
    }
}
Salin selepas log masuk

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 pecah, gelung boleh ditamatkan, jadi fungsi memerlukan pernyataan pulangan.

Jika pernyataan for 语句包含 break (并且没有 return tanpa syarat

tidak

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

Perlu diambil perhatian bahawa tiada analisis aliran kawalan untuk menentukan sama ada sebarang pernyataan 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
}
Salin selepas log masuk

Atas ialah kandungan terperinci Penyataan pulangan tiada dalam gelung bersyarat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kekunci mana yang perlu ditekan semasa menjalankan kod python secara sublime Kekunci mana yang perlu ditekan semasa menjalankan kod python secara sublime Apr 03, 2024 pm 03:54 PM

Kekunci mana yang perlu ditekan semasa menjalankan kod python secara sublime

Bagaimana untuk menjalankan bahasa C dalam notepad++ Bagaimana untuk menjalankan bahasa C dalam notepad++ Apr 08, 2024 am 10:06 AM

Bagaimana untuk menjalankan bahasa C dalam notepad++

Penjelasan terperinci tentang warisan fungsi C++: Bagaimana untuk menggunakan 'penunjuk kelas asas' dan 'penunjuk kelas terbitan' dalam warisan? Penjelasan terperinci tentang warisan fungsi C++: Bagaimana untuk menggunakan 'penunjuk kelas asas' dan 'penunjuk kelas terbitan' dalam warisan? May 01, 2024 pm 10:27 PM

Penjelasan terperinci tentang warisan fungsi C++: Bagaimana untuk menggunakan 'penunjuk kelas asas' dan 'penunjuk kelas terbitan' dalam warisan?

Panduan pemasangan Numpy: Menyelesaikan masalah pemasangan dalam satu artikel Panduan pemasangan Numpy: Menyelesaikan masalah pemasangan dalam satu artikel Feb 21, 2024 pm 08:15 PM

Panduan pemasangan Numpy: Menyelesaikan masalah pemasangan dalam satu artikel

Apakah maksud val dalam java Apakah maksud val dalam java Apr 25, 2024 pm 10:06 PM

Apakah maksud val dalam java

Apakah maksud = dalam java Apakah maksud = dalam java Apr 26, 2024 pm 11:30 PM

Apakah maksud = dalam java

Perbezaan antara const dan statik dalam c++ Perbezaan antara const dan statik dalam c++ May 01, 2024 am 10:54 AM

Perbezaan antara const dan statik dalam c++

Bagaimana untuk menyekat parameter jenis dalam kaedah generik Java? Bagaimana untuk menyekat parameter jenis dalam kaedah generik Java? Apr 30, 2024 pm 01:30 PM

Bagaimana untuk menyekat parameter jenis dalam kaedah generik Java?

See all articles