الدرس 10 من 10

النطاق و local

هدف الدرس

local والتظليل والاستدعاء الذاتي

01

الشرح

كل متغيّر بلا local عامّ: يُحفظ في الجدول _G ويراه كل كود في الحالة نفسها. وإضافات World of Warcraft كلها تتشارك جدولًا عامًّا واحدًا، فـ total عامّ في إضافتك قد يمحو total في إضافة أخرى. أما المحلي فيعيش من سطر تعريفه إلى end الكتلة التي هو فيها، والوصول إليه أسرع.

وlocal داخل كتلة باسم موجود تصنع متغيّرًا جديدًا يظلّل الخارجي ولا يمسّه: local score = score + 10 داخل الدالة تقرأ الخارجي وتكتب في نسخة تموت عند end. ولتعديل الخارجي أسند إليه بلا local.

والدالة التي تنادي نفسها تحتاج اسمها في نطاقها. في local f = function() ... f() ... end لا يوجد f المحلي إلا بعد انتهاء السطر كله، فالنداء في الداخل يبحث عن f عامّ فيجده nil. أما local function f() فتعرّف الاسم أوّلًا ثم تسند إليه الدالة، فتراه من داخلها.

02

المطلوب

في الكود ثلاثة أخطاء نطاق، فأصلحها: اجعل addKill تزيد score الخارجي 10، وchainDamage تنادي نفسها وتبقى محلية، وendRound تُرجع النقاط وتصفّرها دون أن تترك total عامًّا.

معايير التصحيح

5 معايير
  1. addKill تزيد score الخارجي 10
  2. chainDamage تنادي نفسها: 187 لثلاث قفزات
  3. endRound تُرجع النقاط وتصفّرها
  4. total لا يتسرّب متغيّرًا عامًّا
  5. الدوال محلية: لا شيء منها في _G
main.lua
المخرجاتLua 5.4 · wasmoon

جارٍ تحميل Lua…

–/5

يبدأ الفحص حين تجهز البيئة.

5 معايير في بطاقة «المطلوب».