Menu
CoddyTech

الدوال ذات المعاملات المتغيرة

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

لقد استخدمت ... (وسائط متغيرة العدد) في Lua لكتابة دوال تقبل أي عدد من الوسائط. تتيح لك Luau تحديد أنواع الوسائط المتغيرة، بحيث يُتحقق من نوع كل وسيط يمرر إليها:

function sum(...: number): number
    local total = 0
    for _, n in ipairs({...}) do
        total = total + n
    end
    return total
end

print(sum(1, 2))           -- 3
print(sum(1, 2, 3, 4, 5))  -- 15

يُعلن ...: number أن كل وسيط إضافي يجب أن يكون عددًا: لذا تصبح sum(1, "two") خطأً في النوع. أدوات وقت التشغيل هي الأدوات التي تعرفها:

  • يجمع {...} الوسائط المتغيرة في مصفوفة (هنا {number})
  • يعدّ select("#", ...) عدد الوسائط التي وصلت
  • يمكن تمرير ... مباشرةً إلى دالة أخرى، مثل math.max(...)

كما في Lua، يجب أن يكون ... المعامل الأخير: تأتي المعاملات العادية (ذات الأنواع المحددة) أولًا، ثم يجمع الجزء المتغير بقية المعاملات:

function joinWords(separator: string, ...: string): string
    return table.concat({...}, separator)
end

print(joinWords("-", "a", "b", "c"))  -- a-b-c
challenge icon

التحدي

سهل

اكتب دالتين تقبلان أي عدد من الوسائط.

  1. اكتب local function sumAll(...: number): number التي تجمع {...} باستخدام ipairs.
  2. اكتب local function joinWords(separator: string, ...: string): string التي تُرجع table.concat({...}, separator).
  3. اطبع sumAll(5, 10, 15) وjoinWords("-", "apple", "banana", "cherry").

اضغط على Run Code: يُظهر الناتج 30 وapple-banana-cherry.

جرّب بنفسك

-- 1) sumAll(...: number): number
-- 2) joinWords(separator: string, ...: string): string
-- 3) اطبع النتيجتين

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

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