Rumah > Artikel > pembangunan bahagian belakang > Mengapakah fallthrough tidak dibenarkan dalam suis jenis Go?
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:
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!