الدرس 9 من 10
العمليات على كائناتك
- 14 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
تعريف الجمع والمساواة والمقارنة والتحويل إلى نصّ
الشرح
لا يقتصر الجدول الوصفي على __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.
المطلوب
أضف إلى Vector2 أربع دوال: __add التي تُرجع متّجهًا جديدًا، و__eq التي تقارن x وy، و__lt التي تجعل المتّجه الأقصر طولًا هو الأصغر، و__tostring التي تُرجع نصًّا مثل (3, -1).
الفحوص
6 فحوص- عملية الجمع + تجمع الإحداثيات
- عملية الجمع + لا تغيّر المتّجه الأصلي
- ناتج الجمع متّجه مثل طرفيه
- المقارنة == تقارن الإحداثيات
- المقارنة < تجعل المتّجه الأقصر هو الأصغر
- الدالة tostring تعرض (x, y)