ماذا يطبع البرنامج التالي؟
package main
const X = 3
func main() {
const (
X = X + X
Y
)
println(X, Y)
}
الخيارات:
- 6 6
- 6 12
الإجابة: 6 12
شغِّله على Go play.
النقاط الأساسية:
- تقول مواصفة Go: داخل قائمة تعريف ثوابت محاطة بأقواس، يمكن حذف قائمة التعبيرات من أي ConstSpec عدا الأول. وقائمة فارغة كهذه مكافئة للاستبدال النصي لأول قائمة تعبيرات غير فارغة سابقة، ونوعها إن وُجد.
- سيحجب المعرّف المحلي المعرّف العام الذي يحمل الاسم نفسه.
تعريف الثابت في شيفرة الاختبار مكافئ للتعريف التالي:
const (
X = X + X // هنا كِلا "X" هما المعرّف العام
Y = X + X // هنا كِلا "X" هما المعرّف المحلي
)
يُقيَّم المعرّف المحلي X بالقيمة 6 في وقت التصريف، لذا يُقيَّم الثابت Y بالقيمة 12 (في وقت التصريف أيضاً).
يرجى ملاحظة أن نتيجة الإخراج كانت 6 6 عند استخدام سلسلة أدوات Go v1.17 وما قبلها. وقد أُصلح هذا الخطأ منذ سلسلة أدوات Go v1.18.
وبالمثل، منذ سلسلة أدوات Go 1.18، يطبع البرنامج التالي 0 0. أما قبل سلسلة أدوات Go 1.18، فكان يطبع 1 2 (وهو خطأ).
package main
func main() {
const (
iota = iota
X
Y
)
println(X, Y)
}