Si Luau tente d'utiliser une valeur ou une variable dans une opération, telle que l'arithmétique, la concaténation ou l'assignation, mais que la valeur n'est pas du type attendu par l'opération, alors Luau convertit (force) la valeur pour changer son type de données. La coercition se produit à l'exécution pour cette opération et ne change pas la valeur d'une variable.
Arithmétique
Luau convertit les chaînes de caractères en nombres dans les opérations arithmétiques. Ce comportement est intégré à Luau. Si les types sont incompatibles pour l'arithmétique, Luau génère 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) -- erreur : tentative d'effectuer une opération arithmétique (ajout) de chaîne et de nombre
Concaténation
Dans la concaténation, Luau convertit les nombres en chaînes. Pour convertir un nombre en chaîne sans utiliser la coercition, utilisez la fonction string.format().
print("Pi est " .. math.pi) --> Pi est 3.1415926535898print("Pi est " .. 3.1415927) --> Pi est 3.1415927-- Arrondit à trois décimalesprint("Pi est " .. string.format("%.3f", 3.1415927)) -- Pi est 3.142
Assignation
Certaines propriétés attendent certains types de données, comme un Enum ou une chaîne, mais vous pouvez assigner une valeur d'un type différent et Luau convertit la valeur au type attendu par la propriété.
Enums
Luau convertit les nombres et les chaînes de valeurs d'enum en le nom complet de l'enum. Par exemple, vous pouvez nommer la valeur de la propriété Part.Material en utilisant un nombre, une chaîne ou le nom complet de l'enum, et la fonction print() imprime toujours le nom complet de l'enum. Il est préférable 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 du jour
La propriété Lighting.TimeOfDay, qui définit s'il fait nuit, jour ou tout autre moment, est une représentation sous forme de chaîne du type de données DateTime. Si vous assignez un nombre à Lighting.TimeOfDay, Luau le convertit en la représentation sous forme 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