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

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

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

أحيانًا تكون لديك values في مصفوفة، لكنك تحتاج إليها كـ separate values: مثلًا، لتمرير كل element باعتباره argument مستقلًا. هذا هو table.unpack: إذ يعيد كل elements في مصفوفة، موزعة.

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

الصورة المعاكسة هي varargs: function تقبل أي number من arguments عبر .... لقد رأيت ... في Lua: يتيح لك Luau أن تحدد نوعه، بحيث يجب أن تطابق كل incoming value:

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 فصاعدًا: وعند استخدامها كقيمة واحدة في expression، فهذا يعني عمليًا «الـ argument رقم i».

تتوافق الميزتان معًا: إذ تقوم sum(table.unpack(scores)) بتوزيع المصفوفة مباشرةً إلى function ذات vararg: وهي إجابة Luau لنمط استدعاء Spread الذي تراه في لغات أخرى. يقرأ table.unpack المصفوفة دون تعديلها.

challenge icon

التحدي

سهل

أنشئ مصفوفة ذات أنواع scores: {number} تحتوي على 85 و92 و78.

  1. اطبع جميع الدرجات في سطر واحد باستخدام table.unpack.
  2. اطبع أعلى درجة باستخدام math.max وtable.unpack.
  3. عرّف local function sum(...: number): number التي تجمع كل argumentاتها باستخدام select("#", ...) وselect(i, ...)، ثم اطبع sum(table.unpack(scores)).
  4. اطبع sum(10, 20) لإظهار أن الدالة نفسها تعمل مع argumentات عادية.

جرّب بنفسك

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

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

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

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