ما المقصود بـ Upvalues؟
افهم كيفية التقاط الإغلاقات للمتغيرات بوصفها Upvalues من النطاقات المحيطة
ما المقصود بـ Upvalues؟ درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
مراجعة الإغلاقات
الإغلاق دالة مرفقة بمراجع إلى متغيرات من النطاق المحيط بها. وتُسمّى هذه المتغيرات الملتقطة القيم العلوية.
مثال على القيمة العلوية
تلتقط الدالة الداخلية count من نطاق الدالة الخارجية.
local function makeCounter()
local count = 0
return function()
count = count + 1
return count
end
end
local next = makeCounter()
print(next()) -- 1
print(next()) -- 2القيم العلوية متغيرات حيّة
القيم العلوية ليست نسخًا، بل هي مراجع إلى المتغير. ويمكن للإغلاق قراءتها وكتابتها معًا.
قيم علوية متعددة
يمكن للإغلاق التقاط عدة متغيرات من عدة نطاقات محيطة.
local function adder(x)
return function(y) return x + y end
end
local add5 = adder(5)
print(add5(3)) -- 8عمر القيم العلوية
تظل القيم العلوية موجودة ما دام أي إغلاق يشير إليها حيًا. ولا تُجمع بواسطة جامع القمامة إلا بعد جمع جميع الإغلاقات التي تشير إليها.
debug.getupvalue
يمكنكم فحص القيم العلوية باستخدام debug.getupvalue(fn, n)، التي تُرجع اسم القيمة العلوية رقم n وقيمتها.
local x = 10
local function f() return x end
print(debug.getupvalue(f, 1)) -- x 10القيمة العلوية في مقابل العامة
القيم العلوية (المتغيرات المحلية التي تلتقطها الإغلاقات) أسرع من المتغيرات العامة. إذ يصل إليها الجهاز الافتراضي مباشرةً باستخدام فهرس، من دون البحث في جدول.
القيمة العلوية المغلقة
عند انتهاء الكتلة المحيطة، تُصبح القيمة العلوية مغلقة؛ أي تُنقل من المكدس إلى الكومة. ويستمر الإغلاق في مشاركة خلية الكومة هذه.
القيم العلوية المفتوحة في مقابل المغلقة
مفتوحة: لا تزال القيمة العلوية في المكدس (لأن الدالة المحيطة لا تزال قيد التنفيذ). مغلقة: نُقلت القيمة العلوية إلى الكومة عند انتهاء النطاق المحيط.
حالة استخدام عملية
تُطبّق القيم العلوية حالة خاصة داخل الإغلاقات بصورة طبيعية؛ إذ يمكن لدالة في وحدة الاحتفاظ بحالة خاصة من دون كشفها عالميًا.
local id = 0
local function newId()
id = id + 1
return id
endحد عدد القيم العلوية
يمكن لكل دالة في Lua الإشارة إلى ما يصل إلى 255 قيمة علوية. ونادرًا ما يمثل ذلك مصدر قلق عمليًا.
سؤال عن القيمة العلوية
ما القيمة العلوية؟
مراجعة: القيم العلوية
القيم العلوية هي المتغيرات الخارجية التي يلتقطها الإغلاق. وتستمر في الكومة بعد انتهاء النطاق المحيط، وتُشارك بالمرجع، وتوفر حالة خاصة قابلة للتغيير من دون متغيرات عامة.
الأسئلة الشائعة
هل درس «ما المقصود بـ Upvalues؟» مجاني؟
نعم — نص درس «ما المقصود بـ Upvalues؟» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «ما المقصود بـ Upvalues؟»؟
افهم كيفية التقاط الإغلاقات للمتغيرات بوصفها Upvalues من النطاقات المحيطة تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «ما المقصود بـ Upvalues؟»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما المقصود بـ Upvalues؟
- مشاركة Upvalues بين الإغلاقات
- دوال المصنع والمولّدات
- التخزين المؤقت بالاعتماد على الإغلاقات