Se Luau prova a utilizzare un valore o una variabile in un'operazione, come aritemtica, concatenazione o assegnazione, ma il valore non è del tipo che l'operazione si aspetta, allora Luau converte (coerce) il valore per cambiare il suo tipo di dato. La coercizione avviene durante l'esecuzione per quell'operazione e non cambia il valore di una variabile.
Aritmetica
Luau coercisce le stringhe in numeri nelle operazioni aritmetiche. Questo comportamento è integrato in Luau. Se i tipi sono incompatibili per l'aritmetica, Luau genera un errore e non esegue il resto dello script. Ad esempio, non puoi sommare 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) -- errore: tentativo di eseguire aritmetica (somma) stringa e numero
Concatenazione
Nella concatenazione, Luau coercisce i numeri in stringhe. Per convertire un numero in una stringa senza utilizzare la coercizione, usa la funzione string.format().
print("Pi è " .. math.pi) --> Pi è 3.1415926535898print("Pi è " .. 3.1415927) --> Pi è 3.1415927-- Arrotonda a tre decimaliprint("Pi è " .. string.format("%.3f", 3.1415927)) -- Pi è 3.142
Assegnazione
Al alcune proprietà si aspettano determinati tipi di dati, come un Enum o una stringa, ma puoi assegnare un valore di un tipo diverso e Luau converte il valore nel tipo che la proprietà si aspetta.
Enums
Luau coercisce numeri e stringhe di valori enum nel nome completo dell'enum. Ad esempio, puoi nominare il valore della proprietà Part.Material utilizzando un numero, una stringa o il nome completo dell'enum, e la funzione print() stampa sempre il nome completo dell'enum. È buona pratica essere espliciti e utilizzare il nome completo dell'enum. Per ulteriori informazioni sugli Enums, vedere 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 è buona pratica perché è la più esplicitalocal part3 = Instance.new("Part")part3.Material = Enum.Material.Concretepart3.Parent = Workspaceprint(part3.Material) -- Enum.Material.Concrete
Orario del giorno
La proprietà Lighting.TimeOfDay, che definisce se è notte, giorno o qualsiasi altro momento, è una rappresentazione stringa del tipo di dato DateTime. Se assegni un numero a Lighting.TimeOfDay, Luau lo converte nella rappresentazione 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