Se Luau tentar usar um valor ou variável em uma operação, como aritmética , concatenação ou atribuição , mas o valor não é do tipo que a operação espera, então o Luau converte ( coage ) o valor para mudar seu digitarde dados.A coerção ocorre no tempo de execução para essa operação e não altera o valor de uma variável.
Aritmética
Luau coage cordas em números em operações aritméticas.Este comportamento é construído no Luau.Se os tipos forem incompatíveis para a aritmética, Luau lança um erro e não executa o resto do script.Por exemplo, você não pode adicionar uma string a um número se a string não representar um número.
print(100 + "7") -- 107print(100 - "7") -- 93print("1000" + 234) -- 1234print("1000" - 234) -- 766print("hello" + 234) -- error: attempt to perform arithmetic (add) string and number
Concatenação
Na concatenação, Luau coage números em strings. Para converter um número em uma string sem usar coerção, use a função string.format().
print("Pi is " .. math.pi) --> Pi é 3.1415926535898print("Pi is " .. 3.1415927) --> Pi é 3.1415927-- Rodos para três lugares decimaisprint("Pi is " .. string.format("%.3f", 3.1415927)) -- Pi is 3.142
Designação
Algumas propriedades esperam determinados tipos de dados, como um Enum ou string / cadeia / texto, mas você pode atribuir um valor de um tipo diferente a ele e o Luau converte o valor para o tipo que a propriedade espera.
Enumas
Luau coage números e strings de valores de enum em todo o nome de enum.Por exemplo, você pode nomear o valor da propriedade Part.Material usando um número, uma string / cadeia / textoou um nome de enum completo, e a função print() sempre imprime o nome de enum completo.É melhor prática ser explícito e usar o nome completo do enum.Para mais informações sobre Enums, veja Enums.
local Workspace = game:GetService("Workspace")local part1 = Instance.new("Part")part1.Material = 816part1.Parent = Workspaceprint(part1.Material) -- Enum.Material.Concretolocal part2 = Instance.new("Part")part2.Material = "Concrete"part2.Parent = Workspaceprint(part2.Material) -- Enum.Material.Concreto-- Esta é a melhor prática porque é a mais explícitalocal part3 = Instance.new("Part")part3.Material = Enum.Material.Concretepart3.Parent = Workspaceprint(part3.Material) -- Enum.Material.Concrete
Hora do dia
A propriedade Lighting.TimeOfDay, que define se é noite, dia ou qualquer outro momento, é uma representação em string do digitarde dados DateTime.Se você atribuir um número a Lighting.TimeOfDay, Luau o converte para a representação em string 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