استخدام دالة معممة
جزء من قسم مقدمة إلى Luau في رحلة Lua على Coddy. الدرس 59 من 73.
أنت لا تخبر identity أبدًا بماهية T؛ إذ يستنتجه المدقق بنفسه. هذا هو استنتاج النوع: عند كل موضع استدعاء، ينظر Luau إلى الوسيط ويحل قيمة T:
local word = identity("Luau") -- T مستنتج كـ string
local count = identity(12) -- T مستنتج كـ number
local flag = identity(false) -- T مستنتج كـ booleanEach استدعاء مستقل: يمكن أن يكون T من النوع string في سطر، ومن النوع number في السطر التالي. والنتيجة المستنتجة آمنة تمامًا مثل التعليق التوضيحي المكتوب يدويًا: word هو من النوع string بالنسبة إلى المدقق، مع الإكمال التلقائي الكامل والتحقق من الأخطاء.
هناك اختلاف مهم واحد عن TypeScript: يتيح لك TS فرض النوع في موضع الاستدعاء باستخدام identity<number>(5). لا يملك Luau وسيطات أنواع في موضع الاستدعاء. ذلك السطر ليس صياغة خاصة، لذلك يقرأ Luau الأقواس الزاوية على أنها مقارنات أصغر من/أكبر من، ويفشل code. عندما تريد تحديد النوع صراحةً، علّق المتغير بدلًا من ذلك:
local count: number = identity(12)يمكنك مشاهدة الاستنتاج أثناء عمله باستخدام أداة مألوفة: تعيد typeof اسم نوع وقت التشغيل للقيمة، لذا تطبع print(typeof(identity(12))) القيمة number: مرت القيمة عبر generic function دون أي تغيير على الإطلاق.
التحدي
سهلدالة identity العامة من الدرس previous موجودة بالفعل في محررك. استخدم استنتاجها.
أنشئ ثلاثة متغيرات، ودَع أداة التحقق تستنتج T (لا حاجة إلى تعليقات توضيحية):
word: استدعِidentityباستخدام"Luau"count: استدعِidentityباستخدام12flag: استدعِidentityباستخدامfalse
اطبع ما يلي، كل عنصر في سطر مستقل:
word- نتيجة
typeof(word) count- نتيجة
typeof(count) flag- نتيجة
typeof(flag)
جرّب بنفسك
-- دالة الهوية العامة identity من الدرس السابق
local function identity<T>(value: T): T
return value
end
-- اكتب الكود هنا
-- 1) أنشئ word و count و flag باستدعاءات identity (دع T يُستنتج)
-- 2) اطبع كل قيمة متبوعة بـ typeof الخاصة بها
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس مقدمة إلى Luau
1البدء مع Luau
ما هي Luau؟لماذا نستخدم Luau؟أول كود لك بلغة Luauفحص الأنواع وأنماط الأخطاءملخص: مقدمة إلى Luau4العمل مع الدوال
تحديد أنواع المعاملات والقيم المرجعةتحديد أنواع الدوال المجهولةالدوال التي لا ترجع شيئاًالمعاملات الاختياريةالقيم الافتراضية للمعاملاتالدوال متغيرة المعاملاتتعريف أنواع الدوالملخص: الدوال محددة الأنواع7المشروع: مدير المهام مع أنواع البيانات
المشروع: هيكل المهامدالة لإضافة تفاصيل مهمة2الأنواع الأساسية
الأنواع الأساسية: num و str و boolالنوع 'any': مخرج الطوارئالنوع 'unknown'أنواع Nil والأنواع الاختياريةاستنتاج الأنواع في التطبيق العمليتوضيحات الأنواع الصريحةملخص: تدريبات على الأنواع الأساسية5الأسماء المستعارة، الأنواع المشتركة، والأنواع المتقاطعة
الأسماء المستعارة للأنواع الأوليةأنواع الاتحاد (Union Types)التعامل مع أنواع الاتحادالأنواع اللفظية (Literal Types)أنواع التقاطع (Intersection Types)دمج الأسماء المستعارة للأنواعملخص: تجميعات الأنواع المتقدمة3الجداول المحددة الأنواع: المصفوفات والخرائط
المصفوفات المحددة الأنواعإضافة العناصر وقراءتهاما هو نوع الخريطة (Map)؟التصريح عن الخرائط والوصول إليهاالتكرار على الجداولالجداول متعدده الأشكالالمصفوفات المحددة الأنواع متعددة الأبعادtable.unpack والوسائط المتغيرة (Varargs)ملخص: المصفوفات والخرائط6تحديد أشكال الجداول (Typing Table Shapes)
توضيحات أشكال الجداول المضمنةأسماء مستعارة للأنواع لأشكال الجداولالخصائص الاختياريةأشكال الجداول مقابل الجداول الحرةتوسيع أشكال الجداولإضافة الدوارل إلى أشكال الجداولSelf والدوال المسبوقة بنقطتين (Colon Methods)ملخص: تعريف أشكال الجداول9الأنواع المعممة (Generics): نظرة أولى
المشكلة التي تحلها الأنواع المعممةدالة هوية معممةاستخدام دالة معممةالمصفوفات المعممةأسماء مستعارة للأنواع المعممةملخص: الدوال المعممةتدرّب بنفسك: مترجم Lua عبر الإنترنت