coroutine

사용되지 않는 항목 표시

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

coroutine은 스크립트 내에서 여러 작업을 동시에 수행하는 데 사용됩니다. 이러한 작업은 입력에서 값을 생성하거나 더 큰 문제를 해결할 때 하위 루틴에서 작업을 수행하는 것과 같이 포함될 수 있습니다. 작업은 정의된 종료 지점이 필요하지

코루틴 사용

새로운 코루틴을 생성하려면 함수를 제공하여 coroutine.create() 에 시작하십시오. 한 번 생성된 코


local function task(...)
-- 이 함수는 일을 조금 하고 값을 생성합니다.
coroutine.yield("first") -- coroutine.resume()에 의해 반환됩니다.
-- 함수는 다시 시작할 때 계속됩니다.The function continues once it is resumed again
return "second"
end
local taskCoro = coroutine.create(task)
-- 함수를 처음부터 실행하는 즉시 호출을 시작하십시오.
local success, result = coroutine.resume(taskCoro, ...)
print(success, result) --> true, first (작업명 coroutine.yield()}
-- 함수가 실행될 때까지 계속 실행하십시오.
success, result = coroutine.resume(taskCoro)
print(success, result) --> true, second (task halted because it returned "second")

코루틴의 수명 동안 coroutine.status()를 호출하여 상태를 검사할 수 있습니다.


<tbody>
<tr>
<td><b>서스펜드</b></td> <td>코루틴은 재시작될 준비가 되어 있습니다. 코루틴은 <code>coroutine.yield()</code> 함수를 호출할 때 시작됩니다.</td>
</tr>
<tr>
<td><b>실행 중입니다.</b></td>
<td>코루틴은 지금 실행 중입니다.</td>
</tr>
<tr>
<td><b>일반적인 것은 일반적인 것입니다.</b></td> <td>코루틴은 다른 코루틴의 생성을 기다리고 있습니다; 즉, 다른 코루틴을 다시 시작했습니다.</td>
</tr>
<tr>
<td><b>죽음을 맞았습니다.</b></td> <td>함수가 중지되었습니다(오류가 반환되거나 제거됨). 코루틴은 더 이상 사용할 수 없습니다.</td>
</tr>
</tbody>
상태의미

코룰린 감싼 코드

코루틴을 사용할 때 코루틴 개체의 사용을 포기할 수도 있습니다 대신 래퍼 함수를 사용할 수 있습니다. 이런 래퍼 함수는 특정 코루틴을 재사용하고 호출될 때만 반환하는 값을 반환합니다. 이를 수행하려면 coroutine.wrap()를 사용할 수 있습니다.


-- 코루틴을 생성하고 다시 호출하는 래퍼 함수를 반환합니다.
local f = coroutine.wrap(task)
-- coroutine.resume()을 호출한 것처럼 코루틴을 재시작하십시오.
local result = f()
-- 오류가 발생하면 여기에 표시됩니다!
-- This differs from coroutine.resume() which acts similar to pcall()

Library.coroutine.resume()에서 반환된 첫 번째 값은 코루틴이 오류 없이 실행되는지 여부를 설명합니다. 그러나 coroutine.wrap()에서 반환된 함수는 이 작업을 수행하지 않습니다. 대신 반환된 값이 반환하거나 전달

생산자 패턴 예시

단어의 반복을 생성하는 작업을 상상하십시오: 각 번 반복을 생성할 때, 다음 번에 한 번만 더 생성됩니다. 예를 들어, Hello 을 제공하면 Hello , HelloHello, 2>HelloHello2> 등을 생성합니다. 이를 수행하


-- 이 함수는 코루틴이 재시작될 때마다 단어를 반복합니다.
local function repeatThis(word)
local repetition = ""
while true do
-- 반복을 하고 결과를 생성하세요
repetition = repetition .. word
coroutine.yield(repetition)
end
end

이 함수를 코루틴으로 실행하려면 coroutine.create() 다음에 여러 호출을 사용하여 coroutine.resume() :


local repetitionCoro = coroutine.create(repeatThis)
print(coroutine.resume(repetitionCoro, "Hello")) -- 안녕
print(coroutine.resume(repetitionCoro)) -- 안녕, HelloHello
print(coroutine.resume(repetitionCoro)) -- true, HelloHelloHello

이 생산자 기능에는 coroutine.wrap() 를 사용하여 값을 생성하는 기능을 구현할 수도 있습니다.


local f = coroutine.wrap(repeatThis)
print(f("Hello")) -- 안녕
print(f()) -- 안녕하세요
print(f()) -- HelloHelloHello

요약

함수

함수

close

매개 변수

반환

Variant<string, void>

create

매개 변수

반환

isyieldable

반환

resume

매개 변수

...: Variant

반환

Variant<Tuple, string>

running

반환

status

매개 변수

반환

매개 변수

반환

yield

Tuple<Variant>

매개 변수

...: Tuple

반환

Tuple<Variant>