6.2 コルーチン制御
このライブラリに含まれるのはコルーチンを制御する操作であり、操作は全て coroutine
テーブルの中に定義されます。コルーチンの概要は § 2.6 を参照してください。
coroutine.close (co)
コルーチン co
をクローズします。つまり残っているクローズ予約変数を全てクローズし、コルーチンを dead 状態にします。引数として渡されるコルーチンは dead または suspended 状態である必要があります。変数のクローズでエラーが起きたときは false とエラーオブジェクトを返し、エラーが起きなければ true を返します。
coroutine.create (f)
f
を本体に持つ新しいコルーチンを作成します。f
は関数です。新しいコルーチン (thread
型のオブジェクト) を返します。
coroutine.isyieldable ([co])
コルーチン co
が yield できるとき true を返します。co
のデフォルト値は現在実行中のコルーチンです。
コルーチンが yield できるのは、それがメインスレッドでなく、かつ yield できない C 関数の内部でもないときです。
coroutine.resume (co [, val1, ...])
コルーチン co
の実行を開始または再開します。コルーチンを初めて resume すると本体の実行が開始され、val1
, ... の値が本体の関数に引数として渡されます。yield したコルーチンを resume すると、実行が再開されます。そのとき val1
, ... は yield の返り値として渡されます。
コルーチンの実行でエラーが起こらなければ、resume
は true と yield
に渡された値 (コルーチンが yield したとき) もしくは本体の関数が返した値 (コルーチンが終了したとき) を返します。エラーが起きれば、resume
は false とエラーメッセージを返します。
coroutine.running ()
一つ目の返り値として実行中のコルーチンを、二つ目の返り値として実行中のコルーチンがメインスレッドのとき true となる真偽値を返します。
coroutine.status (co)
コルーチン co
の状態を文字列として返します。返る可能性のある値とそれが返る条件は次の通りです:
"running"
: コルーチンが実行中のとき (co
がstatus
を呼んだコルーチンのとき)。"suspended"
: コルーチンが yield を呼び出して停止しているとき、もしくは実行を開始していないとき。"normal"
: コルーチンがアクティブであるものの実行はされていないとき (他のコルーチンを resume しているとき)。"dead"
: コルーチンが本体の関数の実行を完了したとき、もしくはエラーを出して実行を終えたとき。
coroutine.wrap (f)
f
を本体とする新しいコルーチンを作ります。f
は関数です。「呼ばれるたびにコルーチンを resume する関数」が返り、この返り値の関数に渡される引数が resume
への追加の引数として振る舞います。wrap
が返す関数の返り値は resume
と同様ですが、最初の真偽値がありません。wrap
で作成したコルーチンでエラーが起こるとコルーチンがクローズされ、エラーが呼び出し側に伝播されます。
coroutine.yield (...)
この関数を呼び出したコルーチンの実行を停止します。引数は resume
の追加の返り値となります。