ماذا يطبع البرنامج التالي؟
package main
var f = func(x int) {}
func Bar() {
f := func(x int) {
if x >= 0 {
print(x)
f(x - 1)
}
}
f(2)
}
func Foo() {
f = func(x int) {
if x >= 0 {
print(x)
f(x - 1)
}
}
f(2)
}
func main() {
Bar()
print(" | ")
Foo()
}
الخيارات:
- 2 | 2
- 2 | 210
- 210 | 2
- 210 | 210
الإجابة: 2 | 210
شغّله على Go play.
النقاط الأساسية:
- في الدالة
Bar، المتغيرfالثاني (ذاك الموجود في الاستدعاءf(x - 1)) هو المتغيرfعلى مستوى الحزمة. - في الدالة
Foo، جميع المتغيراتfالثلاثة هي المتغيرfعلى مستوى الحزمة.
يُرجى قراءة كتل الشيفرة ونطاقات المعرّفات للحصول على شروحات أكثر تفصيلاً.