الدرس 6 من 10

الوسائط المتغيّرة

هدف الدرس

... و select و table.pack

01

الشرح

الدالة التي لا تعرف عدد وسائطها تستقبلها بثلاث نقاط: local function totalDamage(...). و... ليست جدولًا بل قائمة قيم: تمرّرها كما هي إلى دالة أخرى، كـ string.format(fmt, ...)، أو تعدّها بـ select("#", ...).

وحين تحتاجها جدولًا فـ table.pack(...) تجمعها وتحفظ عددها في الحقل n. والعكس table.unpack(t): تفكّ الجدول قيمًا منفصلة، فتمرّر قائمة إلى دالة تنتظر وسائط، كـ math.max(table.unpack(scores)).

والفخّ في nil. الضربة الضائعة تصل nil، و# لا يُعتمد عليه في جدول فيه nil: #{10, 25, nil} تعطي 2، وipairs تتوقّف عند أول nil. أما select("#", ...) و.n فيعدّان كل ما مُرِّر.

02

المطلوب

اكتب totalDamage(...) تُرجع مجموع الضربات متخطّيةً nil، ثم عدد الهجمات كلها بما فيها الضائعة. وlogf(fmt, ...) تُرجع ناتج string.format بالوسائط نفسها. وmaxOf(list) تُرجع أكبر قيمة في الجدول list بـ math.max.

معايير التصحيح

6 معايير
  1. totalDamage تجمع الضربات وتعدّها
  2. الضربة الضائعة nil لا توقف الجمع
  3. وتُعدّ ضمن الهجمات ولو في الآخر
  4. بلا وسائط: صفر وصفر
  5. logf تمرّر الوسائط إلى string.format
  6. maxOf تفكّ الجدول وسائطَ لـ math.max
main.lua
المخرجاتLua 5.4 · wasmoon

جارٍ تحميل Lua…

–/6

يبدأ الفحص حين تجهز البيئة.

6 معايير في بطاقة «المطلوب».