Se Luau tenta di utilizzare un valore o variabile in un'operazione, come aritmetica , concatenazione o assegnazione , ma il valore non è il tipo che l'operazione si aspetta, Luau lo converte ( coerce ) il valore per cambiare il suo inserisci / scrividi dati.La coercizione accade al momento dell'esecuzione per quell'operazione e non cambia il valore di una variabile.
Aritmetica
Luau cozza le stringhe a numeri in operazioni aritmetiche .Questo comportamento è costruito in Luau.Se i tipi sono incompatibili per l'aritmetica, Luau lancia un errore e non esegue il resto dello script.Ad esempio, non puoi aggiungere una stringa a un numero se la stringa non rappresenta un numero.
print(100 + "7") -- 107print(100 - "7") -- 93print("1000" + 234) -- 1234print("1000" - 234) -- 766print("hello" + 234) -- error: attempt to perform arithmetic (add) string and number
Concatenazione
In concatenazione, Luau coerce i numeri a stringhe. Per convertire un numero in una stringa senza usare la coercizione, usa la funzione string.format().
print("Pi is " .. math.pi) --> Pi è 3.1415926535898print("Pi is " .. 3.1415927) --> Pi è 3.1415927-- Round a tre cifre decimaliprint("Pi is " .. string.format("%.3f", 3.1415927)) -- Pi is 3.142
Assegnazione
Alcune proprietà attendono determinati tipi di dati, come un Enum o una Stringa, ma puoi assegnare un valore di un diverso tipo a essa e Luau converte il valore al tipo che la proprietà si aspetta.
Enumi
Luau coerce i numeri e le stringhe di valori enum in il nome enum completo.Ad esempio, puoi nominare il valore della proprietà Part.Material usando un numero, una Stringao il nome completo dell'Enum, e la funzione print() stampa sempre il nome completo dell'Enum.È una buona pratica essere espliciti e utilizzare il nome enum completo.Per ulteriori informazioni su Enums, vedi 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-- Questa è la migliore pratica perché è la più esplicitalocal part3 = Instance.new("Part")part3.Material = Enum.Material.Concretepart3.Parent = Workspaceprint(part3.Material) -- Enum.Material.Concrete
Ora del giorno
La ProprietàLighting.TimeOfDay che definisce se è notte, giorno o qualsiasi altro momento, è una rappresentazione di stringa del inserisci / scrividi dati DateTime.Se assegni un numero a Lighting.TimeOfDay , Luau lo converte nella rappresentazione a stringa di DateTime .
local Lighting = game:GetService("Lighting")Lighting.TimeOfDay = "05:00:00"print(Lighting.TimeOfDay) -- 05:00:00Lighting.TimeOfDay = 5print(Lighting.TimeOfDay) -- 05:00:00