ومع ذلك ، فإن هذا السلوك غير متسق عند استخدام المتغيرات المحلية في الحرفية للدالة. النظر في الكود التالي:
تأجيل func () { إذا e: = recover () ؛ e! = nil { النتيجة = -1 err = errors.new (e. (سلسلة)) } } () حاجِز() النتيجة = 100 خطأ = لا شيء يعود } BUNC BAR () { الذعر ("الذعر حدث") }يعمل هذا الرمز كما هو متوقع ، والتعيين الناتج إلى -1 ويخطئ في رسالة خطأ مخصصة بعد التعافي من الذعر. ومع ذلك ، إذا استخدمنا المتغيرات المحلية داخل الوظيفة الحرفية ، فإن السلوك يتغير:
func foo() (result int, err error) {
defer func() {
if e := recover(); e != nil {
result = -1
err = errors.New(e.(string))
}
}()
bar()
result = 100
err = nil
return
}
func bar() {
panic("panic happened")
}
في هذه الحالة ، تتم إعادة تعيين النتيجة إلى 0 بدلاً من -1. وذلك لأن بيان التأجيل في الوظيفة الحرفية لا يمكن الوصول أو تعديل قيم الإرجاع المسماة لأنها لم تعد في نطاق. من الأهمية بمكان استخدام قيم الإرجاع المسماة عند محاولة تعديلها باستخدام عبارة تأجيل داخل وظيفة حرفية. لا يمكن الوصول إلى المتغيرات المحلية في مثل هذه الحالات. تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3