このページの内容

6.3 – コルーチン操作

このライブラリは、テーブルcoroutineに収められたコルーチン操作を構成します。コルーチンの一般的な説明については§2.6を参照してください。


coroutine.close ([co])

コルーチンcoを閉じます。つまり、保留中のすべてのクローズ対象変数を閉じ、コルーチンをdead状態にします。coのデフォルトは実行中のコルーチンです。

指定するコルーチンは、dead、suspended、または実行中のコルーチンでなければなりません。実行中のコルーチンに対しては、この関数は返りません。代わりに、そのコルーチンを(再)開始したresumeが返ります。

ほかのコルーチンでは、エラー(コルーチンを停止させた元のエラー、またはクローズメソッド内のエラー)がある場合、この関数は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の結果として渡されます。

コルーチンがエラーなく実行された場合、resumetrueに加えて、yieldへ渡された値(コルーチンがyieldした場合)、または本体関数が返した値(コルーチンが終了した場合)を返します。エラーが発生した場合、resumefalseとエラーメッセージを返します。


coroutine.running ()

実行中のコルーチンとブール値を返します。実行中のコルーチンがメインコルーチンの場合、そのブール値はtrueです。


coroutine.status (co)

コルーチンcoの状態を文字列で返します。コルーチンが実行中(つまり、statusを呼び出したコルーチン自体)なら"running"、コルーチンがyieldの呼び出しで中断しているか、まだ実行を開始していなければ"suspended"、コルーチンがアクティブだが実行中ではない(つまり、別のコルーチンをresumeしている)なら"normal"、コルーチンが本体関数を完了したか、エラーで停止したなら"dead"です。


coroutine.wrap (f)

本体をfとする新しいコルーチンを作成します。fは関数でなければなりません。呼び出されるたびにコルーチンをresumeする関数を返します。この関数に渡された引数は、resumeへの追加引数と同様に動作します。この関数は、先頭のブール値を除き、resumeが返す値と同じ値を返します。エラーの場合、この関数はコルーチンを閉じ、エラーを伝播します。


coroutine.yield (···)

呼び出したコルーチンの実行を中断します。yieldへのすべての引数は、resumeへの追加の結果として渡されます。