Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الـ Metamethod المسماة __tostring

جزء من قسم المنطق والتحكم في التدفق في رحلة Lua على Coddy. الدرس 20 من 54.

عند طباعة جدول في Lua، سترى عادةً شيئًا غير مفيد مثل table: 0x5f8a20، وهو مجرد عنوان في الذاكرة. تتيح لك دالة التحويل الوصفية __tostring تغيير هذا السلوك من خلال تحديد ما يجب عرضه بالضبط عند تحويل جدولك إلى سلسلة نصية.

هذه الطريقة الفوقية مفيدة بشكل خاص لتصحيح الأخطاء وإنشاء مخرجات أكثر وضوحًا. عندما تحتاج Lua إلى تحويل جدولك إلى سلسلة نصية (كما يحدث عند استخدام print())، فإنها تتحقق مما إذا كان للجدول جدولٌ فائق يحتوي على حقل __tostring. وإذا كان الأمر كذلك، تستدعي Lua تلك الدالة وتستخدم القيمة التي تُرجعها بدلًا من التمثيل الافتراضي.

إليك كيفية تنفيذ ذلك:

local vector = {x = 3, y = 4}
local meta = {
    __tostring = function(t)
        return "Vector(" .. t.x .. ", " .. t.y .. ")"
    end
}

setmetatable(vector, meta)

print(vector)  -- المخرجات: Vector(3, 4)

تتلقى الدالة __tostring الجدول باعتباره وسيطًا لها، ويجب أن تُرجع سلسلة نصية. في هذا المثال، تُنشئ سلسلة نصية منسّقة تعرض قيمتي x و y للمتجه بتنسيق سهل القراءة.

هذا يجعل التعامل مع شيفرتك أسهل بكثير. فبدلًا من رؤية عناوين ذاكرة غامضة أثناء تصحيح الأخطاء، تحصل على معلومات مفيدة حول ما يحتويه جدولك.

challenge icon

التحدي

سهل

اكتب function createPoint تأخذ إحداثيي x وy وتُرجع جدول point بتمثيل نصي مخصص.

أنشئ جدولًا يحتوي على الحقلين x وy، وأرفق به metatable مع metamethod __tostring، ثم أرجع نتيجة تحويل الجدول إلى سلسلة نصية باستخدام tostring().

المنطق:

  • أنشئ جدولًا بالمفتاحين x وy مع ضبطهما على الإحداثيات المُعطاة
  • أنشئ metatable يحتوي على __tostring ويُرجع سلسلة نصية بالتنسيق "Point(x, y)"
  • أرفق metatable بجدول point باستخدام setmetatable()
  • أرجع tostring(point) للحصول على التمثيل النصي المخصص

المعاملات:

  • x (number): الإحداثي x للنقطة
  • y (number): الإحداثي y للنقطة

القيمة المُرجعة: التمثيل النصي المخصص للنقطة بالتنسيق "Point(x, y)" (string)

جرّب بنفسك

function createPoint(x, y)
    -- اكتب الكود هنا
end
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق والتحكم في التدفق

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