إذا حاول Luau استخدام قيمة أو متغير في عملية، مثل العمليات الرياضية أو الدمج أو التعيين، ولكن القيمة ليست من النوع الذي تتوقعه العملية، فإن Luau يقوم بتحويل (إجبار) القيمة لتغيير نوع بياناتها. يحدث التحويل في وقت التشغيل لتلك العملية ولا يغير قيمة المتغير.
العمليات الرياضية
يقوم Luau بتحويل السلاسل النصية إلى أرقام في العمليات الرياضية. هذه السلوكيات مدمجة في Luau. إذا كانت الأنواع غير متوافقة للعمليات الرياضية، يقوم Luau بإلقاء خطأ ولا ينفذ بقية النص البرمجي. على سبيل المثال، لا يمكنك إضافة سلسلة نصية إلى رقم إذا لم تمثل السلسلة النصية رقماً.
print(100 + "7") -- 107print(100 - "7") -- 93print("1000" + 234) -- 1234print("1000" - 234) -- 766print("hello" + 234) -- error: attempt to perform arithmetic (add) string and number
الدمج
في الدمج، يقوم Luau بتحويل الأرقام إلى سلاسل نصية. لتحويل رقم إلى سلسلة نصية دون استخدام التحويل، استخدم دالة string.format().
print("Pi is " .. math.pi) --> Pi is 3.1415926535898print("Pi is " .. 3.1415927) --> Pi is 3.1415927-- يقرب إلى ثلاثة أرقام عشريةprint("Pi is " .. string.format("%.3f", 3.1415927)) -- Pi is 3.142
التعيين
بعض الخصائص تتوقع أنواع بيانات معينة، مثل Enum أو سلسلة نصية، ولكن يمكنك تعيين قيمة من نوع مختلف لها ويقوم Luau بتحويل القيمة إلى النوع الذي تتوقعه الخاصية.
الأنماط
يقوم Luau بتحويل الأرقام والسلاسل النصية لقيم الأنماط إلى الاسم الكامل للنمط. على سبيل المثال، يمكنك تسمية قيمة خاصية Part.Material باستخدام رقم، سلسلة نصية، أو الاسم الكامل للنمط، ودالة print() تقوم دوماً بعرض الاسم الكامل للنمط. من الأفضل أن تكون صريحًا وتستخدم الاسم الكامل للنمط. لمزيد من المعلومات حول الأنماط، انظر Enums.
local Workspace = game:GetService("Workspace")local part1 = Instance.new("Part")part1.Material = 816part1.Parent = Workspaceprint(part1.Material) -- Enum.Material.Concretelocal part2 = Instance.new("Part")part2.Material = "Concrete"part2.Parent = Workspaceprint(part2.Material) -- Enum.Material.Concrete-- هذه هي الممارسة المثلى لأنها الأكثر وضوحًاlocal part3 = Instance.new("Part")part3.Material = Enum.Material.Concretepart3.Parent = Workspaceprint(part3.Material) -- Enum.Material.Concrete
وقت اليوم
خاصية Lighting.TimeOfDay، التي تحدد ما إذا كان الليل أو النهار أو أي وقت آخر، هي تمثيل سلسلة لنوع بيانات DateTime. إذا قمت بتعيين رقم إلى Lighting.TimeOfDay، يقوم Luau بتحويله إلى التمثيل النصي لنوع بيانات DateTime.
local Lighting = game:GetService("Lighting")Lighting.TimeOfDay = "05:00:00"print(Lighting.TimeOfDay) -- 05:00:00Lighting.TimeOfDay = 5print(Lighting.TimeOfDay) -- 05:00:00