Se o Luau tentar usar um valor ou variável em uma operação, como aritmética, concatação ou 2> atribuição2>, mas o valor não é o tipo que o operador espera, então o Luau converte ( 5>coerçã5> ) o valor para alterar seu digitarde dado. A coerção ocorre
Arítmica
Luau força as string para números em operações aritméticas . Este comportamento é construído no Luau. Se os tipos não são incompatíveis para aritmética, o 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 representa 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
Em concatenação, Luau força números em cadeia para valores. Para converter um número em uma cadeia 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-- Rounds para três dígitosprint("Pi is " .. string.format("%.3f", 3.1415927)) -- Pi is 3.142
Atribuição
Algumas propriedades esperam alguns tipos de dados, como um Enum ou uma string / cadeia / texto, mas você pode atribuir um valor de um tipo diferente para ele e o Luau converte o valor para o tipo que a propriedade espera.
Enums
Luau força números e valores de enum para o nome de enum completo. Por exemplo, você pode nomear o valor da propriedade Part.Material usando um número, string / cadeia / textoou 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 de enum completo. Para mais informações sobre Enums, veja Enums
local part1 = Instance.new("Part")part1.Parent = workspacepart1.Material = 816print(part1.Material) -- Enum.Material.Concretelocal part2 = Instance.new("Part")part2.Parent = workspacepart2.Material = "Concrete"print(part2.Material) -- Enum.Material.Concrete-- Esta é a melhor prática porque é a mais explícitalocal part3 = Instance.new("Part")part3.Parent = workspacepart3.Material = Enum.Material.Concreteprint(part3.Material) -- Enum.Material.Concrete
Tempo de Dia
A propriedade Lighting.TimeOfDay, que define se é noite, dia ou qualquer outro momento, é uma representação de corda do digitarde dado DateTime. Se você atribuir um número para Lighting.TimeOfDay, o Luau o converte em representação de corda do tipo 1> Datatype.DateTime1>.
local Lighting = game:GetService("Lighting")Lighting.TimeOfDay = "05:00:00"print(Lighting.TimeOfDay) -- 05:00:00Lighting.TimeOfDay = 5print(Lighting.TimeOfDay) -- 05:00:00