Menu
Coddy logo textTech

resume i yield

Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 51 z 54.

W poprzedniej lekcji dowiedziałeś się, jak korutyna może przekazywać wartości z powrotem do głównego kodu za pomocą coroutine.yield(). Komunikacja może jednak przebiegać w obu kierunkach. Możesz też przekazywać wartości do korutyny podczas jej wznawiania.

Gdy wywołujesz coroutine.resume() z dodatkowymi argumentami po obiekcie korutyny, argumenty te są przekazywane do korutyny. Wewnątrz korutyny wartości te stają się wartościami zwracanymi przez wywołanie coroutine.yield(), które ją wstrzymało.

Oto jak to działa:

function receiver()
    print("Coroutine started")
    local value = coroutine.yield()
    print("Received: " .. value)
end

local co = coroutine.create(receiver)
coroutine.resume(co)           -- Uruchamia i wstrzymuje przy yield
coroutine.resume(co, "Hello")  -- Przekazuje "Hello" do korutyny

Gdy korutyna wznawia działanie po raz drugi, przekazany zostaje ciąg znaków "Hello", który staje się wartością zwracaną przez coroutine.yield() i zostaje zapisany w zmiennej value.

challenge icon

Wyzwanie

Łatwy

Napisz funkcję createEchoCoroutine, która przyjmuje initialMessage i zwraca ciąg znaków pokazujący dwukierunkową komunikację między głównym kodem a współprogramem.

Utwórz współprogram, który najpierw przekazuje initialMessage, następnie po wznowieniu odbiera odpowiedź, a na koniec przekazuje tę odpowiedź z powrotem. Funkcja powinna demonstrować przekazywanie wartości zarówno na zewnątrz, jak i do współprogramu.

Logika:

  • Utwórz funkcję, która przekazuje initialMessage i zapisuje wartość zwróconą przez to przekazanie
  • Po odebraniu wartości przekaż ją z powrotem
  • Opakuj tę funkcję we współprogram za pomocą coroutine.create()
  • Wznów współprogram po raz pierwszy, aby uzyskać początkową wiadomość
  • Wznów współprogram po raz drugi, przekazując "Response"
  • Przechwyć wartość przekazaną podczas drugiego wznowienia
  • Zwróć ciąg znaków w formacie: First: [first_yield]\nSecond: [second_yield]

Parametry:

  • initialMessage (ciąg znaków): Wiadomość, którą współprogram przekaże jako pierwszą

Zwraca: Ciąg znaków pokazujący obie przekazane wartości, oddzielone znakiem nowej linii (ciąg znaków). Format: First: Hello\nSecond: Response

Spróbuj swoich sił

function createEchoCoroutine(initialMessage)
    -- Wpisz kod tutaj
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