coroutine

사용되지 않는 항목 표시

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

A 코루틴 은 동일한 스크립트 내에서 여러 태스크를 동시에 수행하기 위해 사용됩니다.이러한 작업에는 입력에서 값을 생성하거나 큰 문제를 해결할 때 하위 루틴에서 작업을 수행하는 것이 포함될 수 있습니다.태스크에는 정의된 종료 지점이 필요하지 않지만, 다른 사람들이 작업을 수행할 수 있도록 특정 시간을 정의해야 합니다( 중지 ).

코루틴 사용

새로운 코루틴은 coroutine.create()에 함수를 제공하여 생성할 수 있습니다.생성되면 코루틴은 함수에 인수를 전달하는 첫 번째 호출인 coroutine.resume() 이 수행될 때까지 실행을 시작하지 않습니다.이 호출은 함수가 중단되거나 호출되면 coroutine.yield() 을 반환하고, 이 일이 발생하면 coroutine.resume() 는 함수에서 반환된 값, coroutine.yield() 에 전송된 값 또는 오류 메시지를 반환합니다.오류가 발생하면 두 번째 반환 값은 발생한 오류입니다.


local function task(...)
-- 이 함수는 약간의 작업을 수행한 다음 일부 값을 반환할 수 있습니다
coroutine.yield("first") -- coroutine.resume()에 의해 반환될 예정
-- 함수는 다시 시작되면 계속됩니다
return "second"
end
local taskCoro = coroutine.create(task)
-- 처음부터 함수를 실행하는 첫 번째 시간 중단 호출
local success, result = coroutine.resume(taskCoro, ...)
print(success, result) --> true, 먼저(코루틴.yield()라는 작업 호출)
-- 계속 실행하여 결과를 반환하거나 중지할 때까지 함수 실행 계속
success, result = coroutine.resume(taskCoro)
print(success, result) --> true, second (task halted because it returned "second")

코루틴의 수명 동안 상태를 확인하려면 coroutine.status()를 호출할 수 있습니다:


<th>의미</th>
</tr>
</thead>
<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)
-- 코루틴을 호출한 것처럼 코루틴을 재시작합니다.resume()
local result = f()
-- 오류가 발생하면 여기에서 발생합니다!
-- This differs from coroutine.resume() which acts similar to pcall()

coroutine.resume()에서 반환된 첫 번째 값은 코루틴이 오류 없이 실행되었는지 여부를 설명합니다.그러나, coroutine.wrap()에서 반환된 함수는 이렇게 하지 않습니다: 대신 반환되거나 전달된 값을 직접 coroutine.yield()에 반환합니다, 있는 경우.코루틴 함수를 실행하는 동안 오류가 발생하면 반환된 함수의 호출에서 오류가 발생합니다.

프로듀서 패턴 예시

단어의 반복을 생성하는 작업을 상상해 보십시오: 반복을 생성할 때마다 다음 작업은 하나 더 생성합니다.예를 들어, Hello 를 제공하면 Hello , HelloHello , HelloHelloHello 등이 생성됩니다.이를 수행하려면 repeatThis()를 정의할 수 있습니다.


-- 이 함수는 코루틴이 재개될 때마다 단어를 반복합니다
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")) -- true, 헬로
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, ()>

오류 메시지(있는 경우).

create

신체 f가 Luau 함수여야 하는 새로운 코루틴을 생성합니다. Creates a new coroutine, with body f. f must be a Luau function.

매개 변수

반환

isyieldable

이 함수의 코루틴이 안전하게 생성될 수 있는 경우 true 를 반환합니다.메타메소드 또는 C 함수 내에서 코루틴을 포기하는 것은 pcallxpcall 을 제외하고 금지됩니다.

반환

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

resume

코루틴의 실행을 시작하거나 계속합니다 co .코루틴을 재시작할 때 처음, 그 신체실행하기 시작합니다.값 ... 은 바디 함수에 인수로 전달됩니다.코루틴이 양도되었으면 재시작을 재개하십시오; 값 ... 은 양도의 결과로 전달됩니다.코루틴에 오류가 없이 실행되면 중단 후 반환은 참 plus 전달된 모든 값(코루틴이 생산되는 경우) 또는 바디 함수에서 반환된 모든 값(코루틴이 종료되는 경우)을 반환합니다.오류가 있으면 중단 후 오류 메시지와 함께 다시 반환됩니다.

매개 변수

...: Variant

반환

running

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

반환

status

코루틴이 실행 중인 경우 문자열로 코루틴 상태를 반환합니다:'실행', 코루틴이 중단되었을 때 '일시 중지됨', 아직 실행을 시작하지 않은 경우 '정상', 코루틴이 활성 상태이지만 아직 실행되지 않은 경우 '중단됨', 코루틴이 중단되었거나 오류가 발생했을 때 '사망'입니다.

매개 변수

반환

바디 f를 사용하여 새로운 코루틴을 생성합니다.f는 Luau 함수여야 합니다.호출될 때마다 코루틴을 재개하는 함수를 반환합니다.함수에 전달된 모든 인수는 재개할 추가 인수로 작동합니다.첫 번째 부울을 제외하고 재시작에서 반환된 동일한 값을 반환합니다.오류가 발생하면 오류를 전파합니다.

매개 변수

반환

yield

Tuple<Variant>

호출하는 코루틴의 실행을 일시 중지합니다.생성할 모든 인수가 중단을 위한 추가 결과로 전달됩니다.메타메소드 또는 C 함수 내에서 코루틴을 포기하는 것은 pcallxpcall 을 제외하고 금지됩니다.

매개 변수

...: Tuple

반환

Tuple<Variant>