Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

table.unpack والوسائط المتغيرة (Varargs)

جزء من قسم مقدمة إلى Luau في رحلة Lua على Coddy. الدرس 20 من 73.

في بعض الأحيان تكون لديك قيم داخل array ولكنك تحتاج إليها كقيم مستقلة (separate) — على سبيل المثال، لتمرير كل element كـ argument خاص به. هذا هو دور table.unpack: فهي ترجع جميع عناصر الـ array منتشرة (spread out).

local scores: {number} = {85, 92, 78}
print(table.unpack(scores))     -- 85  92  78  (سطر واحد، ثلاث قيم)
print(math.max(table.unpack(scores))) -- 92 — أصبح كل عنصر وسيطًا

الصورة المقابلة هي varargs: وهي function تقبل أي عدد من الـ arguments عبر .... لقد رأيت ... في Lua — يتيح لك Luau إمكانية تحديد أنواعها (Typed)، بحيث يجب أن تتطابق كل قيمة قادمة مع النوع المspecified (must match):

local function sum(...: number): number
    local total = 0
    for i = 1, select("#", ...) do
        total += select(i, ...)
    end
    return total
end

ترجع select("#", ...) عدد الـ arguments التي وصلت، بينما ترجع select(i, ...) الـ arguments بدءًا من الموضع i وما بعده — وعند استخدامها كقيمة مفردة داخل تعبير، فإنها تعني فعليًا "الـ argument رقم i".

تتكامل الميزتان معًا: حيث تقوم sum(table.unpack(scores)) بنشر الـ array مباشرة إلى داخل الـ vararg function — وهو حل Luau لنمط Spread-call الذي قد تراه في لغات أخرى. تقرأ table.unpack الـ array دون تعديلها.

challenge icon

التحدي

سهل

أنشئ array مكتوب النوع scores: {number} يحتوي على 85، 92 و 78.

  1. اطبع جميع الـ scores في line واحد باستخدام table.unpack.
  2. اطبع أعلى قيمة score باستخدام math.max و table.unpack.
  3. قم بـ define الدالة local function sum(...: number): number والتي تجمع كل الـ arguments الخاصة بها باستخدام select("#", ...) و select(i, ...)، ثم اطبع sum(table.unpack(scores)).
  4. اطبع sum(10, 20) لتوضيح أن نفس الـ function تعمل مع arguments العادية.

جرّب بنفسك

-- اكتب الكود هنا
-- 1) أعلن scores: {number} = {85, 92, 78}
-- 2) اطبع(table.unpack(scores)) و math.max للـ scores المفكوكة
-- 3) عرّف sum(...: number): number باستخدام select، اطبع sum(table.unpack(scores))
-- 4) اطبع sum(10, 20)
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس مقدمة إلى Luau

تدرّب بنفسك: مترجم Lua عبر الإنترنت