Jeśli Luau próbuje użyć wartości lub zmiennej w operacji, takiej jak arytmetyka, konkatenacja lub przypisanie, ale wartość nie jest typu, którego operacja oczekuje, Luau konwertuje (konwertuje) wartość, aby zmienić jej typ danych. Konwersja odbywa się w czasie wykonywania dla tej operacji i nie zmienia wartości zmiennej.
Arytmetyka
Luau konwertuje ciągi znaków (stringi) na liczby w operacjach arytmetycznych. To zachowanie jest wbudowane w Luau. Jeśli typy nie są zgodne z arytmetyką, Luau zgłasza błąd i nie wykonuje reszty skryptu. Na przykład, nie możesz dodać ciągu znaków do liczby, jeśli ten ciąg nie reprezentuje liczby.
print(100 + "7") -- 107
print(100 - "7") -- 93
print("1000" + 234) -- 1234
print("1000" - 234) -- 766
print("hello" + 234) -- błąd: próba wykonania operacji arytmetycznej (dodawanie) między ciągiem a liczbąKonkatenacja
W konkatenacji, Luau konwertuje liczby na ciągi znaków. Aby przekonwertować liczbę na ciąg znaków bez użycia konwersji, użyj funkcji string.format().
print("Pi to " .. math.pi) --> Pi to 3.1415926535898
print("Pi to " .. 3.1415927) --> Pi to 3.1415927
-- Zaokrągla do trzech miejsc po przecinku
print("Pi to " .. string.format("%.3f", 3.1415927)) -- Pi to 3.142Przypisanie
Niektóre właściwości oczekują określonych typów danych, takich jak Enum lub ciąg znaków, ale możesz przypisać do nich wartość innego typu, a Luau konwertuje tę wartość na typ, którego oczekuje właściwość.
Enums
Luau konwertuje liczby i ciągi znaków wartości enum na pełną nazwę enum. Na przykład, możesz nazwać wartość właściwości Part.Material używając liczby, ciągu znaków lub pełnej nazwy enum, a funkcja print() zawsze wypisuje pełną nazwę enum. Najlepszą praktyką jest być precyzyjnym i używać pełnej nazwy enum. Aby uzyskać więcej informacji o Enums, zobacz Enums.
local Workspace = game:GetService("Workspace")
local part1 = Instance.new("Part")
part1.Material = 816
part1.Parent = Workspace
print(part1.Material) -- Enum.Material.Concrete
local part2 = Instance.new("Part")
part2.Material = "Concrete"
part2.Parent = Workspace
print(part2.Material) -- Enum.Material.Concrete
-- To jest najlepsza praktyka, ponieważ jest najbardziej precyzyjne
local part3 = Instance.new("Part")
part3.Material = Enum.Material.Concrete
part3.Parent = Workspace
print(part3.Material) -- Enum.Material.ConcreteCzas dnia
Właściwość Lighting.TimeOfDay, która definiuje, czy jest noc, dzień, czy inny czas, jest reprezentacją ciągu znaków typu DateTime. Jeśli przypiszesz liczbę do Lighting.TimeOfDay, Luau konwertuje ją na reprezentację ciągu znaków 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