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") -- 107print(100 - "7") -- 93print("1000" + 234) -- 1234print("1000" - 234) -- 766print("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.1415926535898print("Pi to " .. 3.1415927) --> Pi to 3.1415927-- Zaokrągla do trzech miejsc po przecinkuprint("Pi to " .. string.format("%.3f", 3.1415927)) -- Pi to 3.142
Przypisanie
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 = 816part1.Parent = Workspaceprint(part1.Material) -- Enum.Material.Concretelocal part2 = Instance.new("Part")part2.Material = "Concrete"part2.Parent = Workspaceprint(part2.Material) -- Enum.Material.Concrete-- To jest najlepsza praktyka, ponieważ jest najbardziej precyzyjnelocal part3 = Instance.new("Part")part3.Material = Enum.Material.Concretepart3.Parent = Workspaceprint(part3.Material) -- Enum.Material.Concrete
Czas 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:00Lighting.TimeOfDay = 5print(Lighting.TimeOfDay) -- 05:00:00