Menu
CoddyTech

استخدام دالة معممة

جزء من قسم مقدمة إلى Luau في رحلة Lua على Coddy. الدرس 63 من 80.

لا تحدد أبدًا لـ identity ماهية T؛ إذ يستنتجها المدقّق بنفسه. يُسمى هذا استدلال النوع: عند كل موضع استدعاء، ينظر Luau إلى الوسيط ويستنتج قيمة T:

local word = identity("Luau")   -- استُنتج أن T من النوع string
local count = identity(12)      -- استُنتج أن T من النوع number
local flag = identity(false)    -- استُنتج أن T من النوع boolean

كل استدعاء مستقل: يمكن أن تكون T سلسلة نصية في سطر، ورقمًا في السطر التالي. والنتيجة المستنتجة آمنة تمامًا مثل التعليق التوضيحي المكتوب يدويًا: يعرف المدقّق أن word هو من النوع string، مع إكمال تلقائي كامل وفحص للأخطاء.

هناك اختلاف مهم عن TypeScript: يتيح لك TS فرض النوع عند موضع الاستدعاء باستخدام identity<number>(5). لا يدعم Luau وسائط النوع عند موضع الاستدعاء. هذا السطر ليس صياغة خاصة، لذا يقرأ Luau الأقواس الزاوية على أنها مقارنات أصغر من/أكبر من، ويفشل تنفيذ الشيفرة. عندما تريد تحديد النوع صراحةً، أضف تعليقًا توضيحيًا إلى المتغير بدلًا من ذلك:

local count: number = identity(12)

يمكنك مشاهدة الاستدلال أثناء العمل باستخدام أداة مألوفة: تُرجع typeof اسم نوع القيمة في وقت التشغيل، لذا فإن print(typeof(identity(12))) تطبع number: مرّت القيمة عبر الدالة العامة من دون أي تغيير.

challenge icon

التحدي

سهل

دع أداة التحقق تستنتج T عند كل استدعاء.

  1. أسفل الدالة، خزّن identity("Oslo") في local city وidentity(42) في local floors، من دون أي تعليقات توضيحية.
  2. اطبع typeof(city)، ثم typeof(floors).

اضغط على تشغيل الكود: سيعرض الناتج string وnumber.

جرّب بنفسك

-- دالة identity العامة من الدرس السابق
local function identity<T>(value: T): T
    return value
end

-- 1) ‏city وfloors من استدعاءات identity، دون تعليقات توضيحية للأنواع
-- 2) اطبع typeof لكلٍّ منهما

جميع دروس مقدمة إلى Luau

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