Tworzenie i wznawianie korutyny
Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 49 z 54.
Skoro wiesz już, czym są korutyny, nauczmy się, jak je tworzyć i uruchamiać w Lua.
Aby utworzyć korutynę, użyj funkcji coroutine.create(). Funkcja ta przyjmuje zwykłą funkcję jako argument i opakowuje ją w obiekt korutyny. Oto podstawowa składnia:
function myTask()
print("Hello from coroutine!")
end
local co = coroutine.create(myTask)Na tym etapie korutyna istnieje, ale jeszcze nie zaczęła działać. Funkcja myTask nie została wywołana. Aby faktycznie rozpocząć lub kontynuować wykonywanie korutyny, użyj coroutine.resume():
coroutine.resume(co)Gdy po raz pierwszy wywołasz resume() dla korutyny, zacznie ona wykonywać swoją funkcję od początku. Jeśli korutyna wykona ją do końca bez zatrzymywania się, zakończy działanie i nie będzie można jej wznowić.
Oto kompletny przykład:
function greet()
print("Starting...")
print("Finishing!")
end
local co = coroutine.create(greet)
coroutine.resume(co) -- Wyświetla oba komunikatyKorutyna działa od początku do końca za jednym razem. W następnej lekcji dowiesz się, jak sprawić, by korutyny zatrzymywały się w trakcie wykonywania.
Wyzwanie
ŁatwyNapisz funkcję runSimpleCoroutine, która przyjmuje message i zwraca wynik z korutyny, która wypisuje tę wiadomość.
Utwórz korutynę za pomocą coroutine.create(), która opakowuje funkcję wypisującą przekazaną wiadomość. Następnie użyj coroutine.resume(), aby wykonać korutynę. Funkcja powinna zwracać wypisaną wiadomość.
Logika:
- Zdefiniuj funkcję, która wypisuje parametr message
- Utwórz korutynę z tej funkcji za pomocą
coroutine.create() - Wznów korutynę za pomocą
coroutine.resume() - Zwróć wypisaną wiadomość
Parametry:
message(string): Wiadomość, którą ma wypisać korutyna
Zwraca: Wiadomość wypisaną przez korutynę (string)
Spróbuj swoich sił
function runSimpleCoroutine(message)
-- 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