Si Luau intenta usar un valor o variable en una operación, como aritmética , concatenación , o asignación , pero el valor no es el tipo que la operación espera, entonces Luau convierte ( coerce ) el valor para cambiar su introducirde datos. La coerción ocurre en el tiempo de ejecución de esa operación y no cambia el valor de una variable.
Aritmética
Luau coerce cadenas a números en operaciones aritméticas . Este comportamiento está construido en Luau. Si los tipos son incompatibles para la aritmética, Luau lanza un error y no ejecuta el resto del script. Por ejemplo, no puede agregar una cadena a un número si la cadena no representa un número.
print(100 + "7") -- 107 añosprint(100 - "7") -- 93 vecesprint("1000" + 234) -- año 1234print("1000" - 234) -- 766 vecesprint("hello" + 234) -- error: attempt to perform arithmetic (add) string and number
Concatenación
En la concatenación, Luau obliga a los números a convertirse en cadenas. Para convertir un número a una cadena sin usar la coerción, use la función string.format().
print("Pi is " .. math.pi) -- 3.1415926535898print("Pi is " .. 3.1415927) -- 3,1415927-- Redondea a tres decimalesprint("Pi is " .. string.format("%.3f", 3.1415927)) -- Pi is 3.142
Asignación
Algunas propiedades esperan ciertos tipos de datos, como un Enum o una cadena, pero puedes asignarle un valor de un tipo diferente y Luau convierte el valor al tipo que espera la propiedad.
Enum
Luau constriñe números y cadenas de valores de enum en el nombre de enum completo. Por ejemplo, puede nombrar el valor de la propiedad Part.Material usando un número, una cadena o un nombre de enum completo, y la función print() siempre imprime el nombre de enum completo. Lo mejor es ser explícito y usar el nombre de enum completo. Para más información sobre los enums, consulte Enums.
local part1 = Instance.new("Part")part1.Parent = workspacepart1.Material = 816print(part1.Material) -- Enum.Material.Concretolocal part2 = Instance.new("Part")part2.Parent = workspacepart2.Material = "Concrete"print(part2.Material) -- Enum.Material.Concreto-- Esta es la mejor práctica porque es la más explícita.local part3 = Instance.new("Part")part3.Parent = workspacepart3.Material = Enum.Material.Concreteprint(part3.Material) -- Enum.Material.Concrete
Tiempo Del Día
La propiedad Lighting.TimeOfDay, que define si es de noche, día o cualquier otro momento, es una representación de cadena del introducirde datos DateTime. Si asigna un número a Lighting.TimeOfDay, Luau lo convierte en la representación de cadena 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