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

제공된 코루틴을 죽은 상태로 닫습니다. 이 함수는 코루틴이 오류 상태가 아닌 경우 true를 반환하지 않습니다. 현재 실행 중인 코루틴은 죽은 상태이므로 false를 반환하고 오류 메시지를 표시합니다. 현재 실행 중인 코루틴은

매개 변수

반환

true 오류 상태가 아닌 경우 코루틴을 닫는 것이 아닙니다.

Variant<string, void>

오류 메시지, 있는 경우.

create

새로운 코루틴을 만들어, f.f는 Lua 함수여야 합니다.

매개 변수

반환

isyieldable

이 함수를 안전하게 생성할 수 있는 경우 true를 반환합니다. pcall 또는 C 함수 내에서 이 함수를 안전하게 생성하는 것은 금지되어 있지만, xpcall 및 2>pcall2> 을 제외하고 메타메서드 또는 C 함수 내에서 이 함수를 안전하게 생성할 수 있습니다.

반환

이 시점에서 코루틴이 안전하게 생성될 수 있는지 여부.

resume

시작하거나 코루틴 co 의 실행을 시작합니다. 코루틴을 처음 시작할 때, 코의 실행을 시작합니다. 값 ... 은 코 메시지

매개 변수

...: Variant

반환

Variant<Tuple, string>

running

실행 코루틴을 반환합니다.

반환

status

코 루틴의 상태를 문자열으로 반환합니다. '실행', 코 루틴이 실행되고 있는 경우(즉, 상태를 호출했습니다) '정지', 코 루틴이 호출을 기다리는 경우(즉, 상태를 호출했습니다) '일시 중지', 코 루틴이 실행되지 않고

매개 변수

반환

새로운 코루틴을 생성합니다. 바디 f. f는 Lua 함수여야 합니다. 코루틴을 재시작할 때마다 f. f를 반환합니다. 모든 인수를 함수에 반환하지만 첫 번째 변수는 제외됩니다. 오류가 발생할 경우 코루틴을 재시작하는 경우 오류가 반환됩니다. 오류가 발생할 경우 오류를 확산합니다.

매개 변수

반환

yield

Tuple<Variant>

호출 코루틴의 실행을 일시 중지합니다. 생성할 아르규멘트는 모두 추가 결과로 리스트에 지정됩니다. 메타메서드나 C 함수 내에서 코루틴을 생성하는 것은 금지되지만, pcallxpcall 을 제외합니다.

매개 변수

...: Tuple

반환

Tuple<Variant>