الدرس 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 فحوص في بطاقة «المطلوب».