Struktury sterowe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Struktury kontrolne są stwierdzeniami, które zarządzają przepływem wykonania kodu Luau. Istnieje cztery główne rodzaje struktur kontrolnych:

  • Zgłoszenie jeśli inaczej z wykonaniem kodu wykonuje się tylko wtedy, jeśli spełniony zdefiniowany warunek jest true . Zgłoszenie kodu nie powtarza się.
  • A podczas gdy pętla wykonuje kod tylko, jeśli określony warunek jest true , a powtarza wykonanie, gdy warunek pozostaje true .
  • Powtarzający się loop wykonuje kod i powtarza wykonanie, jeśli warunek jest true .
  • A do pętli wykonuje kod w określonej liczbie razy w zależności od podanych wejść.

Warunkiem dla if stwierdzeń, while pętli i repeat pętli może być dowolna wyrażenie Luau lub wartość. Jeśli wartość nie jest 2> false2> lub 5> nil

Jeśli oświadczenia

Podstawowe if oświadczenie testuje jego warunki. Jeśli warunek jest prawdziwy, to Luau wykonuje kod pomiędzy then i end.

Możesz użyć elseif stwierdzenie, aby testować na dodatkowe warunki, jeśli if warunki są fałszywe. Możesz użyć else stwierdzenie, aby wykonano kod, jeśli wsz

W if , elseif i else łańcuchu, Luau testuje warunki od góry do dołu, zatrzymuje się na pierwszej <a href="/reference/engine/databases">真实</a> warunku i wykonuje kod, który następnie jest wykonany.


if 2 + 2 == 5 then
print("Two plus two is five") -- Nie drukuje się, ponieważ warunek jest fałszywy
elseif 2 + 3 == 5 then
print("Two plus three is five") -- Dwa plus trzy to pięć
else
print("All conditions failed") -- Nie drukuje się, ponieważ poprzedni warunek jest prawdziwy
end

Podczas gdy Loops

A whiledo pętla ocenia, czy określona kondycja jest prawdziwa lub fałszywa. Jeśli kondycja jest false lub 1> nil1>, to pętla kończy się, a Luau omiina kod w pętli. Jeśli kondycja jest 4>


local timeRemaining = 10
while timeRemaining > 0 do
print("Seconds remaining: " .. timeRemaining)
task.wait(1)
timeRemaining -= 1
end
print("Timer reached zero!")
--[[ Wyświetlany wynik:
Seconds remaining: 10
Seconds remaining: 9
Seconds remaining: 8
Seconds remaining: 7
Seconds remaining: 6
Seconds remaining: 5
Seconds remaining: 4
Seconds remaining: 3
Seconds remaining: 2
Seconds remaining: 1
Timer reached zero!
]]

Nieskończone pętli

Możesz użyć pętli whiledo do nieskończoności, pisząc true jako warunek.


while true do
print("Looping...")
task.wait(0.5)
end
--[[ Wyświetlany wynik:
Looping...
Looping...
Looping...
Looping...
...
]]

Pętle powtarzające się

Pętla repeatuntil powtarza się, aż kondycja będzie prawdziwa. Warunkowy test ocenia po zakończeniu bloku kodu, więc blok kodu zawsze będzie działać przynajmniej raz. W przeciwieństwie do innych języków, zakres 2>luau2> lokalnej zmiennej z


local currentGoblinCount = 18
-- Wygeneruj gobliny do maksymalnie 25 w gra
repeat
spawnGoblin()
currentGoblinCount += 1
print("Current goblin count: " .. currentGoblinCount)
until currentGoblinCount == 25
print("Goblins repopulated!")
--[[ Wyświetlany wynik:
Current goblin count: 19
Current goblin count: 20
Current goblin count: 21
Current goblin count: 22
Current goblin count: 23
Current goblin count: 24
Current goblin count: 25
Goblins repopulated!
]]

Dla pętli

A for loop wykonuje kod, zdefiniowany na liczbę razy, lub na liczbę pozycji w kolekcji.

Liczby dla pętli

Pętla fordo określa liczbę czasów wykonania pętli używając kontroferta. Pętla jest deklarowana z wartością początkową, wartością końcową i opcjonalnym zwiększeniem.

Luau ustawia licznik równy wartości początkowej, wykonuje blok kodu w pętli for i następnie dodaje increment do kontroferta. Jeśli increment jest pozytywny, to proces powtarza się, aż licznik będzie równy lub większy niż wartość końcowa. Jeśli increment jest ujemny, to proces powtarza się, aż licznik będzie równy lub mniejszy niż wartość końcowa.

Opcjonalny wzrost domyślnie wynosi 1 . Nie musi to być całkowity liczba.


for counter = 1, 3 do
print(counter)
end
--[[ Wyświetlany wynik:
1
2
3
]]
for counter = 1, 6, 2 do
print(counter)
end
--[[ Wyświetlany wynik:
1
3
5
]]
for counter = 2, 0, -0.5 do
print(counter)
end
--[[ Wyświetlany wynik:
2
1.5
1
0.5
0
]]

Generyczne dla Loopów

Geniczny for pętli przechodzi nad pozycje w kolekcji, a nie po kolej z liczb. Z genycznymi for pętlami można wykonująć kod dla każdej pozycji w kolekcjai łatwo użyć każdej pozycji w kodzie.

Dla pętli wymaga funkcji lub inicjatora, aby przeprowadzać przez różne rodzaje zbiorów. Globalny ipairs() zwraca inicjator dla maszyny przeliczowej, a globalny pairs() zwraca inicjator dla słowników. Biblioteka string dostarcza 2>Library.ciąg.gmatch2> do przetwarz

Generyzowana Iteration

W Luau możesz przejść ponad tabelę używając bezpośrednio słowa kluczowego in na tabeli, zamiast używać funkcji przejścia takiej jak ipairs() :


for i, v in {1, 2, 3, 4, 5} do
print(i, v)
end

Zaimplementowane powtórzenie umożliwia również użycie metody __iter dla powstawania funkcji implementora powtarzalnej. Ten skonfigurowany przykład powtarza się na maszynie w odwrotnym porządku, od jego ostatniego elementu do pierwszego:


local myTable = {1, 2, 3, 4, 5}
myMetatable = {
__iter = function(t)
local i = #t + 1
return function()
i -= 1
if i > 0 then
return i, t[i]
end
end
end,
}
setmetatable(myTable, myMetatable)
for i, v in myTable do
print(i, v)
end
--[[ Wyświetlany wynik:
5 5
4 4
3 3
2 2
1 1
]]

Materiały

Funkcja ipairs() zwraca inkrementator, który przechodzi przez liczbowe wskaźniki w tabeli i zwraca index i value dla każdego elementu. To czyni go odpowiednim dla tabel, w których wszystkie wskaźniki są liczbowe.


local array = {"a", "b", "c", "d", "e"}
for index, value in ipairs(array) do
print(index, value)
end
--[[ Wyświetlany wynik:
1 a
2 b
3 c
4 d
5 e
]]

Słowniki

Funkcja pairs() wwraca przejścia przez wszystkie indeksy (w tym liczbowe indeksy) w tabeli i zwraca key i value dla każdej pozycji w tabeli słów典. Rząd przejścia elementów w tabeli słów典 jest arbitralny. To sprawia, że jest odpowiednie do przejścia nad dyktionary, gdzie


local dictionary = {
[1] = "a",
["Hello"] = "b",
[5] = "c",
[true] = "d",
["World"] = "f",
[false] = "e"
}
for key, value in pairs(dictionary) do
print(key, value)
end
--[[ Wyświetlany wynik:
Hello b
true d
false e
World f
5 c
1 a
]]

Kontrolowanie słów kluczowych

Łączenie pętli

Aby zmusić pętel do kończyć, użyj słowa kluczowego break. Poniższy przykład kodu pokazuje, jak złamać nieskończoną pętelę while - do.


local secondsElapsed = 0
local timeout = 5
while true do
task.wait(1)
secondsElapsed += 1
print("Seconds elapsed:", secondsElapsed)
if secondsElapsed == timeout then
break
end
end
print("Five seconds elapsed. Time to move on!")
--[[ Wyświetlany wynik:
1
2
3
4
5
Five seconds elapsed. Time to move on!
]]

Końcowe pętli

Aby zmusić pętelę do powtarzania się i ponownego uruchomienia, użyj słowa kluczowego continue. Pętla for będzie przejść przez kontroferta; while i 2>peat2> — 5> até5> sprawdzi stan


local function GetChildrenOfClass(parent: Instance, className: string): {Instance}
local children = {}
for _, child in parent:GetChildren() do
if child.ClassName ~= className then continue end -- Przeprowadza przez pętę
table.insert(children, child)
end
return children
end