Luaの勉強: 5
Luaリファレンスマニュアルの日本語訳でお勉強第5回です。
コルーチン
言葉だけ知ってるけど意味を知らないコルーチン。協調型マルチスレッドといわれたりします。継続の一種だともいわれたりします。
Luaのコルーチンは、
- coroutine.createに、引数としてコルーチンのメイン関数を渡して作成
- corutine.resumeで開始。
- コルーチン内部では、coroutine.yieldで抜ける。このとき、よんだ側のresumeが帰ってくる。戻り値はtrueと、yieldの引数(あれば)。コルーチン内部でエラーがあればfalse。
- 再度corutine.resumeを呼ぶと、yieldの後から再開される。
- resumeの引数は、最初の時はメイン関数への引数。yieldからの復帰のときは、yieldの戻り値になります。
- coroutine.wrapってのがあります。resumeに似ているが、
- 戻り値はコルーチンじゃなくてresumeを呼び出す関数
- 関数の戻り値は、resumeの戻り値から最初のブール値を除いたもの
- コルーチン内部のエラーをキャッチすることはなく、そのまま呼び出しもとに伝搬
メカニズムは簡単ですね。使いどころを理解するのがちょっと難しそう。
でも、Lightroom SDKでは標準ライブラリcoroutineが使えないので、Lightroomのプラグイン使ってる限りはコルーチン使うことはないのです。ちょっとつまらん