Sprawdzanie stanu korutyny
Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 52 z 54.
Podczas pracy z korutynami często musisz wiedzieć, w jakim stanie znajduje się korutyna. Czy aktualnie działa? Czy jest wstrzymana i czeka na wznowienie? Czy zakończyła już wykonywanie?
Lua udostępnia funkcję coroutine.status(), która pozwala odpowiedzieć na te pytania.
Funkcja coroutine.status() przyjmuje coroutine jako argument i zwraca ciąg znaków opisujący jej bieżący stan. Możliwe są trzy stany:
| "suspended" | Coroutine jest wstrzymana w miejscu yield() i można ją wznowić |
| "running" | Coroutine jest obecnie wykonywana |
| "dead" | Coroutine zakończyła działanie i nie można jej ponownie wznowić |
Oto jak tego używać:
function task()
coroutine.yield()
print("Finishing")
end
local co = coroutine.create(task)
print(coroutine.status(co)) -- "suspended"
coroutine.resume(co)
print(coroutine.status(co)) -- "suspended" (wstrzymana przy yield)
coroutine.resume(co)
print(coroutine.status(co)) -- "dead" (zakończona)Wyzwanie
ŁatwyNapisz funkcję checkCoroutineLifecycle, która przyjmuje resumeCount i zwraca ciąg znaków pokazujący status korutyny w różnych momentach jej cyklu życia.
Utwórz korutynę, która raz wykonuje yield, a następnie kończy działanie. Sprawdź i zapisz jej status po utworzeniu, po pierwszym wznowieniu (gdy jest wstrzymana na yield) oraz po kolejnych wznowieniach zależnych od resumeCount.
Logika:
- Utwórz funkcję, która raz wykonuje yield z ciągiem znaków
"paused", a następnie kończy działanie - Opakuj tę funkcję w korutynę za pomocą
coroutine.create() - Sprawdź status natychmiast po utworzeniu za pomocą
coroutine.status() - Wznów korutynę raz i ponownie sprawdź jej status
- Wznów korutynę dodatkową liczbę razy na podstawie
resumeCount - 1(łączna liczba wznowień = resumeCount) - Sprawdź końcowy status po wszystkich wznowieniach
- Zwróć ciąg znaków ze wszystkimi trzema statusami w formacie:
initial: [status]\\nafter first resume: [status]\\nfinal: [status]
Parametry:
resumeCount(liczba): Łączna liczba wznowień korutyny (minimum 1)
Zwraca: Ciąg znaków pokazujący status korutyny w trzech momentach jej cyklu życia (ciąg znaków). Format: initial: suspended\nafter first resume: suspended\nfinal: dead
Spróbuj swoich sił
function checkCoroutineLifecycle(resumeCount)
-- Wpisz tutaj kod
end
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Zaawansowane iterowanie po tabelach
Iterowanie za pomocą pairs()Iterowanie za pomocą ipairs()pairs() a ipairs()Powtórka — karta postaci2Więcej funkcji biblioteki table
table.concat()Tworzenie tabel i unpack()table.sort()Sortowanie niestandardowe za pomocą funkcjiPodsumowanie — tablica najlepszych wyników5Projekt: silnik tekstowej gry przygodowej
Konfiguracja projektu: pokójŁączenie pokoi3Zaawansowane koncepcje funkcji
Zwracanie wielu wartościFunkcje wariadyczne (...)Funkcje jako wartości pierwszej klasyFunkcje anonimoweCzym jest domknięcie?Podsumowanie — prosty obsługiwacz zdarzeń6Obsługa błędów
Funkcja error()Wywołania chronione za pomocą pcall()Podsumowanie — bezpieczne dzielenie9Korutyny dla początkujących
Czym jest korutyna?Tworzenie i wznawianie korutynyWstrzymywanie za pomocą coroutine.yield()resume i yieldSprawdzanie stanu korutynyPowtórka — generator liczbPowtórka — matematyka wektorowaPoćwicz samodzielnie: Kompilator Lua online