Nilai Pengembalian Fungsi Go: Mentafsir Corak "Koma Ok"
Dalam Go, fungsi boleh mengembalikan berbilang nilai, yang boleh berguna dalam senario tertentu. Walau bagaimanapun, tidak semua pulangan berbilang nilai adalah sah. Coretan kod berikut menunjukkan kes yang sah:
func FindUserInfo(id string) (Info, bool) { it, present := all[id] return it, present }
Sebaliknya, kod ini tidak sah:
func FindUserInfo(id string) (Info, bool) { return all[id] }
Mengapakah contoh pertama sah manakala yang kedua tidak? Memahami perkara ini memerlukan mendalami teknik yang dikenali sebagai corak "comma ok".
Idiom "Comma Ok": Membuka Kunci Kekunci yang Hilang dan Nilai Sifar
The "koma ok" simpulan bahasa digunakan untuk membezakan entri yang hilang dalam peta daripada nilai sifar. Corak ini sangat lazim apabila mengakses kunci peta. Pertimbangkan perkara berikut:
var seconds int var ok bool seconds, ok = timeZone[tz]
Jika kekunci tz wujud dalam peta Zon masa, saat akan diberikan nilai yang sepadan dan ok akan ditetapkan kepada benar. Jika tidak, saat akan ditetapkan kepada 0, dan ok akan ditetapkan kepada palsu.
Butiran Pelaksanaan: Menyelami Kod Sumber Go
Mendapatkan penjelasan, kami beralih kepada Go's kod sumber. Kaedah unpack bertanggungjawab untuk mengendalikan tugasan dan pemulangan berbilang nilai. Ia menentukan sama ada ungkapan tertentu layak sebagai huruf "koma ok" berdasarkan kriteria berikut:
Dalam kes penetapan berbilang nilai, parameter allowCommaOk mesti ditetapkan kepada benar untuk mendayakan corak "koma ok". Walau bagaimanapun, dalam pengkompil Go, parameter ini secara konsisten ditetapkan kepada palsu.
Akibat untuk Pulangan Berbilang Nilai
Tingkah laku ini membayangkan bahawa corak "koma ok" boleh hanya digunakan dalam konteks tugasan. Untuk mendapatkan berbilang nilai daripada fungsi, pembolehubah di sebelah kiri tugasan diperlukan.
Contoh Mendalam
Untuk menggambarkan, kami memeriksa Checker Kaedah .initVars():
var x operand if commaOk { var a [2]Type for i := range a { get(&x, i) a[i] = check.initVar(lhs[i], &x, returnPos.IsValid()) } check.recordCommaOkTypes(rhs[0], a) return }
Dalam kod ini, bendera komaOk hanya diaktifkan apabila bilangan pembolehubah di sebelah kiri tugasan sepadan dengan bilangan nilai yang dikembalikan oleh fungsi. Akibatnya, adalah perlu untuk mengisytiharkan pembolehubah bagi setiap nilai yang perlu diambil.
Kesimpulan
Corak "koma ok" dalam Go ialah alat yang berharga untuk mendiskriminasi antara entri peta yang hilang dan nilai sifar. Walau bagaimanapun, kebolehgunaannya terhad kepada konteks tugasan, yang memerlukan penggunaan pembolehubah untuk menyimpan nilai yang dikembalikan. Memahami kekangan ini memastikan pelaksanaan pulangan berbilang nilai yang betul dan cekap dalam kod Go.
Atas ialah kandungan terperinci Mengapakah corak 'koma ok' hanya terpakai dalam konteks tugasan apabila mengembalikan berbilang nilai daripada fungsi Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!