Si Luau essaie d'utiliser une valeur ou variable dans une opération, comme arithmétique , concaténation ou affectation , mais que la valeur n'est pas le type auquel l'opération s'attend, Luau la convertit ( force ) en changeant son taperde données.La coercition se produit au moment de l'exécution pour cette opération et ne change pas la valeur d'une variable.
Arithmétique
Luau force les chaînes à des nombres dans les opérations arithmétiques.Ce comportement est intégré dans Luau.Si les types sont incompatibles pour l'arithmétique, Luau lance une erreur et n'exécute pas le reste du script.Par exemple, vous ne pouvez pas ajouter une chaîne à un nombre si la chaîne ne représente pas un nombre.
print(100 + "7") -- 107print(100 - "7") -- 93print("1000" + 234) -- 1234print("1000" - 234) -- 766print("hello" + 234) -- error: attempt to perform arithmetic (add) string and number
Concaténation
En concaténation, Luau force les nombres à des chaînes. Pour convertir un nombre en chaîne sans utiliser la contrainte, utilisez la fonction string.format().
print("Pi is " .. math.pi) --> Pi est 3.1415926535898print("Pi is " .. 3.1415927) --> Pi est 3.1415927-- Rounds à trois décimales placesprint("Pi is " .. string.format("%.3f", 3.1415927)) -- Pi is 3.142
Attribution
Certaines propriétés s'attendent à certains types de données, tels qu'un Enum ou une chaîne, mais vous pouvez lui attribuer une valeur d'un autre type et Luau convertit la valeur en le type que la propriété attend.
Enums
Luau force les nombres et les chaînes de valeurs enum dans le nom complet enum.Par exemple, vous pouvez nommer la valeur de la propriété Part.Material en utilisant un nombre, une chaîne ou un nom d'enum complet, et la fonction print() imprime toujours le nom d'Enum complet.Il est recommandé d'être explicite et d'utiliser le nom complet de l'enum.Pour plus d'informations sur les enums, voir 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-- C'est la meilleure pratique car c'est le plus explicitelocal part3 = Instance.new("Part")part3.Material = Enum.Material.Concretepart3.Parent = Workspaceprint(part3.Material) -- Enum.Material.Concrete
Heure de la journée
La propriété Lighting.TimeOfDay qui définit si c'est la nuit, le jour ou tout autre moment est une représentation en chaîne du taperde données DateTime.Si vous attribuez un nombre à Lighting.TimeOfDay, Luau le convertit en représentation de chaîne de DateTime .
local Lighting = game:GetService("Lighting")Lighting.TimeOfDay = "05:00:00"print(Lighting.TimeOfDay) -- 05:00:00Lighting.TimeOfDay = 5print(Lighting.TimeOfDay) -- 05:00:00