coroutine.yield()로 일시 중단하기
Coddy Lua 여정의 로직 및 흐름 제어 (Logic & Flow) 섹션에 포함된 레슨 — 54개 중 50번째.
코루틴의 진정한 강력함은
각
coroutine.yield() 함수에서 나옵니다. 이것이 코루틴이 실행 중간에 스스로를 일시 정지하고 자신을 재개한 코드에게 제어권을 다시 넘겨줄 수 있게 해주는 핵심입니다.코루틴이 coroutine.yield()를 호출하면, 그 정확한 시점에서 즉시 실행을 중단합니다. 해당 코루틴에 대해 다음 번에 coroutine.resume()을 호출하면, 아무 일도 없었던 것처럼 yield() 호출 직후부터 다시 계속 실행됩니다.간단한 예시입니다:function countToThree()
print("One")
coroutine.yield()
print("Two")
coroutine.yield()
print("Three")
end
local co = coroutine.create(countToThree)
coroutine.resume(co) -- "One"을 출력한 다음 일시 중지합니다
coroutine.resume(co) -- "Two"을 출력한 다음 일시 중지합니다
coroutine.resume(co) -- "Three"을 출력한 다음 종료합니다resume() 호출이 yield()를 만날 때까지 코루틴을 실행하는 방식에 주의하세요. 코루틴은 모든 지역 변수와 실행 상태를 포함하여 정확히 어디서 멈췄는지 기억합니다.양도(yield)할 때 값을 다시 전달할 수도 있습니다. coroutine.yield()에 전달하는 모든 인수는 coroutine.resume()의 반환 값이 됩니다. coroutine.resume()은 항상 첫 번째 값으로 불리언 status를 반환하며(코루틴이 오류 없이 실행되면 true, 오류가 발생하면 false), 그 뒤에 yield()로 전달된 모든 값이 이어집니다:function giveNumbers()
coroutine.yield(10)
coroutine.yield(20)
end
local co = coroutine.create(giveNumbers)
-- status는 true, value는 10
local status, value = coroutine.resume(co)
print(value) -- 출력: 10
-- status는 true, value는 20
status, value = coroutine.resume(co)
print(value) -- 출력: 20챌린지
쉬움count를 매개변수로 받아 값을 여러 번 yield하는 코루틴의 출력을 나타내는 문자열을 반환하는 함수 createYieldingCoroutine을 작성하세요.
1부터 count까지 각 단계에 대해 문자열 "Step X"를 yield하는 코루틴을 총 count 단계만큼 생성하세요. 코루틴을 count 번 재개(resume)하여 모든 yield된 값을 수집합니다. yield된 모든 값을 줄바꿈 문자로 연결하여 반환하세요.
로직:
- 루프를 사용하여
count까지"Step 1","Step 2"등을 yield하는 함수를 생성합니다. - 모든 yield 이후에 함수가 완료되어야 합니다 ("Done"에 대한 마지막 yield 없음).
coroutine.create()를 사용하여 이 함수를 코루틴으로 감쌉니다.- 코루틴을
count번 재개하여 yield된 각 값을 수집합니다. - yield된 모든 값을 줄바꿈 문자로 연결합니다.
- 연결된 문자열을 반환합니다.
매개변수:
count(number): yield할 단계의 수
반환값: 줄바꿈으로 구분된 yield된 모든 값을 포함하는 문자열 (string). 형식: Step 1\nStep 2\nStep 3
직접 해보기
function createYieldingCoroutine(count)
-- 여기에 코드를 작성하세요
end
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.