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 の返り値として渡されます。

コルーチンの実行でエラーが起こらなければ、resumetrueyield に渡された値 (コルーチンが yield したとき) もしくは本体の関数が返した値 (コルーチンが終了したとき) を返します。エラーが起きれば、resumefalse とエラーメッセージを返します。

coroutine.running ()

一つ目の返り値として実行中のコルーチンを、二つ目の返り値として実行中のコルーチンがメインスレッドのとき true となる真偽値を返します。

coroutine.status (co)

コルーチン co の状態を文字列として返します。返る可能性のある値とそれが返る条件は次の通りです:

coroutine.wrap (f)

f を本体とする新しいコルーチンを作ります。f は関数です。「呼ばれるたびにコルーチンを resume する関数」が返り、この返り値の関数に渡される引数が resume への追加の引数として振る舞います。wrap が返す関数の返り値は resume と同様ですが、最初の真偽値がありません。wrap で作成したコルーチンでエラーが起こるとコルーチンがクローズされ、エラーが呼び出し側に伝播されます。

coroutine.yield (...)

この関数を呼び出したコルーチンの実行を停止します。引数は resume の追加の返り値となります。