Tipo de coerción

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

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 lo convierte ( obliga ) el valor para cambiar su introducirde datos.La coerción ocurre en el tiempo de ejecución para esa operación y no cambia el valor de una variable.

Árbitro

Luau obliga cadenas a números en operaciones aritméticas.Este comportamiento se integra 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 puedes agregar una cadena a un número si la cadena no representa un número.


print(100 + "7") -- 107
print(100 - "7") -- 93
print("1000" + 234) -- 1234
print("1000" - 234) -- 766
print("hello" + 234) -- error: attempt to perform arithmetic (add) string and number

Concatenación

En concatenación, Luau obliga a los números a cadenas. Para convertir un número a una cadena sin usar coerción, use la función string.format().


print("Pi is " .. math.pi) --> Pi es 3.1415926535898
print("Pi is " .. 3.1415927) --> Pi es 3.1415927
-- Rondas a tres lugares decimales
print("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 otro tipo a ella y Luau convierte el valor al tipo que espera la propiedad.

Enumeraciones

Luau fuerza números y cadenas de valores enumerados en el nombre completo de enum.Por ejemplo, puedes nombrar el valor de la propiedad Part.Material usando un número, cadena o nombre de enum completo, y la función print() siempre imprime el nombre de enum completo.Es mejor práctica ser explícito y usar el nombre completo del enumerado.Para obtener más información sobre enums, consulte Enums.


local Workspace = game:GetService("Workspace")
local part1 = Instance.new("Part")
part1.Material = 816
part1.Parent = Workspace
print(part1.Material) -- Enum.Material.Concreto
local part2 = Instance.new("Part")
part2.Material = "Concrete"
part2.Parent = Workspace
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.Material = Enum.Material.Concrete
part3.Parent = Workspace
print(part3.Material) -- Enum.Material.Concrete

Hora del día

La propiedad Lighting.TimeOfDay que define si es de noche, día o cualquier otra hora, es una representación de cadena del introducirde datos DateTime.Si asignas 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:00
Lighting.TimeOfDay = 5
print(Lighting.TimeOfDay) -- 05:00:00