الدرس 9 من 10

العمليات على كائناتك

هدف الدرس

تعريف الجمع والمساواة والمقارنة والتحويل إلى نصّ

01

الشرح

لا يقتصر الجدول الوصفي على __index، بل تعرّف فيه أيضًا معنى العمليات على كائناتك، فـ __add للجمع a + b، و__eq للمقارنة ==، و__lt للمقارنة < ومعها >، لأن Lua تقرأ a > b على أنها b < a، و__tostring لما يعرضه print وtostring.

وبهذا تكتب pos + velocity كما في الرياضيات، بدل أن تجمع x وy بنفسك في كل مكان. وإن لم تعرّف __eq فإن == تسأل «هل هما الجدول نفسه؟»، فلا يتساوى متّجهان لهما الإحداثيات نفسها، وإن لم تعرّف __tostring طبع print شيئًا مثل table: 0x10fb78. أمّا .. فلا تستعمل __tostring، لذلك اكتب "الموقع " .. tostring(pos).

والخطأ الشائع في __add أن تعدّل a ثم تُرجعه، فيبدو الجمع صحيحًا، لكن local nextPos = pos + velocity تحرّك pos نفسه دون أن تنتبه. لذلك أرجِع دائمًا متّجهًا جديدًا بـ Vector2.new.

02

المطلوب

أضف إلى Vector2 أربع دوال: __add التي تُرجع متّجهًا جديدًا، و__eq التي تقارن x وy، و__lt التي تجعل المتّجه الأقصر طولًا هو الأصغر، و__tostring التي تُرجع نصًّا مثل (3, -1).

الفحوص

6 فحوص
  1. عملية الجمع + تجمع الإحداثيات
  2. عملية الجمع + لا تغيّر المتّجه الأصلي
  3. ناتج الجمع متّجه مثل طرفيه
  4. المقارنة == تقارن الإحداثيات
  5. المقارنة < تجعل المتّجه الأقصر هو الأصغر
  6. الدالة tostring تعرض (x, y)
main.lua
المخرجاتLua 5.4 (wasmoon)

نحمّل بيئة Lua الآن.

–/6

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

تجد 6 فحوص في بطاقة «المطلوب».