Mengapakah corak 'koma ok' hanya terpakai dalam konteks tugasan apabila mengembalikan berbilang nilai daripada fungsi Go?

DDD
Lepaskan: 2024-11-07 09:37:03
asal
730 orang telah melayarinya

Why is the

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

Sebaliknya, kod ini tidak sah:

func FindUserInfo(id string) (Info, bool) {
    return all[id]
}
Salin selepas log masuk

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

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:

  • Mengindeks peta
  • Mengambil nilai daripada saluran
  • Melakukan penegasan jenis

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

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!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan