resume과 yield
Coddy Lua 여정의 로직 및 흐름 제어 (Logic & Flow) 섹션에 포함된 레슨 — 54개 중 51번째.
이전 레슨에서는 coroutine.yield()를 사용하여 코루틴이 메인 코드로 값을 다시 전달하는 방법을 배웠습니다. 하지만 통신은 양방향으로 흐를 수 있습니다. 코루틴을 재개(resume)할 때 코루틴 내부로 값을 보낼 수도 있습니다.
coroutine 객체 뒤에 추가 인자를 전달하여 coroutine.resume()을 호출하면, 해당 인자들이 coroutine 내부로 전달됩니다. coroutine 내부에서 이 값들은 일시 정지시켰던 coroutine.yield() 호출의 반환값이 됩니다.
작동 방식은 다음과 같습니다:
function receiver()
print("Coroutine started")
local value = coroutine.yield()
print("Received: " .. value)
end
local co = coroutine.create(receiver)
coroutine.resume(co) -- 시작하고 yield에서 일시 중지합니다
coroutine.resume(co, "Hello") -- 코루틴에 "Hello"를 전달합니다coroutine이 두 번째로 재개될 때, 문자열 "Hello"가 전달되어 coroutine.yield()의 반환값이 되며, 이는 value 변수에 저장됩니다.
챌린지
쉬움initialMessage를 전달받아 메인 코드와 코루틴 간의 양방향 통신을 보여주는 문자열을 반환하는 createEchoCoroutine 함수를 작성하세요.
처음에 initialMessage를 yield하고, 재개될 때 응답을 전달받은 다음, 마지막으로 해당 응답을 다시 yield하는 코루틴을 생성하세요. 이 함수는 코루틴의 외부 및 내부로 값을 전달하는 과정을 보여주어야 합니다.
로직:
initialMessage를yield하고 해당yield로부터 반환된 값을 저장하는 함수를 생성합니다.- 값을 전달받은 후, 그 값을 다시
yield하여 내보냅니다. coroutine.create()를 사용하여 이 함수를 코루틴으로 감쌉니다.- 코루틴을 처음
resume하여 초기 메시지를 가져옵니다. "Response"를 전달하면서 코루틴을 두 번째로resume합니다.- 두 번째
resume에서yield된 값을 캡처합니다. First: [first_yield]\nSecond: [second_yield]형식의 문자열을 반환합니다.
매개변수:
initialMessage(string): 코루틴이 처음에yield할 메시지
반환값: 두 yield된 값이 줄바꿈으로 구분되어 나타나는 문자열 (string). 형식: First: Hello\nSecond: Response
직접 해보기
function createEchoCoroutine(initialMessage)
-- 여기에 코드를 작성하세요
end
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.