Menu
Coddy logo textTech

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)
challenge icon

Wyzwanie

Łatwy

Napisz 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
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator Lua online