Menu
Coddy logo textTech

resume과 yield

Coddy Lua 여정의 Logic & Flow 섹션에 포함된 레슨 — 54개 중 51번째.

이전 레슨에서 coroutine.yield()를 사용하여 코루틴이 메인 코드로 값을 다시 전달하는 방법을 배웠습니다. 하지만 통신은 양방향으로 흐를 수 있습니다. 코루틴을 재개할 때 코루틴 내부로 값을 보낼 수도 있습니다.

코루틴 객체 뒤에 추가 인자를 넣어 coroutine.resume()을 호출하면, 해당 인자들은 코루틴으로 전달됩니다. 코루틴 내부에서 이 값들은 코루틴을 일시 중단시켰던 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"를 전달함

코루틴이 두 번째로 재개될 때, 문자열 "Hello"가 전달되어 coroutine.yield()의 반환값이 되며, 이는 value 변수에 저장됩니다.

challenge icon

챌린지

쉬움

initialMessage를 인자로 받아 메인 코드와 코루틴 간의 양방향 통신을 보여주는 문자열을 반환하는 createEchoCoroutine 함수를 작성하세요.

먼저 initialMessage를 yield하고, 재개(resume)될 때 응답을 받은 다음, 마지막으로 그 응답을 다시 yield하는 코루틴을 생성하세요. 이 함수는 코루틴 외부로 값을 전달하고 다시 코루틴 내부로 값을 전달하는 과정을 모두 보여주어야 합니다.

로직:

  • initialMessage를 yield하고 해당 yield로부터 반환된 값을 저장하는 함수를 생성합니다.
  • 값을 받은 후, 그 값을 다시 외부로 yield합니다.
  • coroutine.create()를 사용하여 이 함수를 코루틴으로 감쌉니다.
  • 코루틴을 처음으로 재개하여 초기 메시지를 가져옵니다.
  • "Response"를 전달하며 코루틴을 두 번째로 재개합니다.
  • 두 번째 재개에서 yield된 값을 캡처합니다.
  • 다음 형식의 문자열을 반환합니다: First: [first_yield]\nSecond: [second_yield]

매개변수:

  • initialMessage (string): 코루틴이 처음으로 yield할 메시지

반환값: 줄바꿈으로 구분된 두 yield 값을 보여주는 문자열 (string). 형식: First: Hello\nSecond: Response

치트 시트

코루틴을 재개할 때 coroutine.resume()에 추가 인자를 전달하여 코루틴 내부로 값을 보낼 수 있습니다. 이 인자들은 코루틴을 일시 중단시켰던 coroutine.yield() 호출의 반환 값이 됩니다.

function receiver()
    local value = coroutine.yield()  -- 일시 중단하고 입력을 기다립니다
    print("Received: " .. value)
end

local co = coroutine.create(receiver)
coroutine.resume(co)           -- 코루틴을 시작하고 yield에서 일시 중단합니다
coroutine.resume(co, "Hello")  -- 코루틴에 "Hello"를 전달합니다

코루틴이 두 번째로 재개될 때, "Hello"가 전달되어 coroutine.yield()의 반환 값이 되며, 이는 value 변수에 저장됩니다.

직접 해보기

function createEchoCoroutine(initialMessage)
    -- 여기에 코드를 작성하세요
end
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨