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