Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah fallthrough tidak dibenarkan dalam suis jenis Go?

Mengapakah fallthrough tidak dibenarkan dalam suis jenis Go?

Barbara Streisand
Barbara Streisandasal
2024-11-12 11:41:01646semak imbas

Why is fallthrough not allowed in Go's type switches?

Suis Jenis lwn. Pernyataan Suis Biasa

Dalam Go, fallthrough dibenarkan dalam pernyataan suis biasa tetapi bukan dalam suis jenis. Walaupun spesifikasi Go tidak menerangkan secara eksplisit sebab percanggahan ini, ia berpunca daripada perbezaan asas dalam kedua-dua binaan.

Pernyataan Suis Biasa:

Dalam keadaan biasa penyataan suis, ungkapan suis menilai kepada satu nilai pemalar bagi jenis tertentu. Nilai ini kemudiannya dibandingkan dengan pemalar dalam pernyataan kes. Jika ungkapan suis sepadan dengan pemalar, blok kes yang sepadan akan dilaksanakan.

Fallthrough dalam pernyataan suis biasa membolehkan pelaksanaan diteruskan ke blok kes seterusnya, tidak kira sama ada ungkapan suis sepadan dengan pemalar kes. Tingkah laku ini boleh berguna apabila pernyataan kes berturut-turut mengendalikan senario yang berkaitan.

Suis Jenis:

Suis jenis, sebaliknya, menilai ungkapan suis kepada nilai antara muka . Jenis nilai antara muka kemudiannya ditentukan secara dinamik pada masa jalan dan dibandingkan dengan jenis yang dinyatakan dalam pernyataan kes. Bergantung pada padanan, blok kes yang sepadan dilaksanakan.

Tidak seperti pernyataan suis biasa, fallthrough tidak dibenarkan dalam suis jenis kerana ia tidak boleh digunakan secara konsisten. Sebabnya ialah ungkapan suis dalam suis jenis boleh mengembalikan nilai antara muka apa-apa jenis. Jika fallthrough dibenarkan, jenis ungkapan suis akan berubah apabila ia beralih daripada satu blok huruf ke huruf seterusnya.

Sebagai contoh, pertimbangkan suis jenis berikut:

switch i := x.(type) {
case int:
    fmt.Println(i + 1)
    fallthrough // Error: cannot fallthrough in type switch
case float64:
    fmt.Println(i + 2.0)
}

Dalam ini kod, jika ungkapan suis x ialah integer, blok int case akan dilaksanakan. Jika kegagalan dibenarkan, pelaksanaan akan diteruskan ke blok float64 kes. Walau bagaimanapun, pada ketika ini, jenis ungkapan suis yang saya akan tukar daripada int kepada float64.

Ini akan mengakibatkan pecahnya ketekalan jenis, kerana pernyataan kes berikutnya menjangkakan ungkapan suis menjadi float64. Untuk mengekalkan konsistensi, fallthrough tidak dibenarkan dalam suis jenis.

Pendekatan Alternatif untuk Pengendalian Jenis Bersyarat:

Jika anda perlu mengendalikan berbilang jenis dengan cara bersyarat, ada ialah pendekatan alternatif untuk menaip suis:

  • Gunakan berbilang suis biasa pernyataan: Buat pernyataan suis berasingan untuk setiap jenis yang anda perlu kendalikan.
  • Gunakan penegasan jenis antara muka kosong: Gunakan penegasan jenis .(antara muka{}) untuk menyemak jenis daripada nilai antara muka, dan kemudian kendalikan nilai tersebut dengan sewajarnya.

Atas ialah kandungan terperinci Mengapakah fallthrough tidak dibenarkan dalam suis jenis Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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