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のプラグイン使ってる限りはコルーチン使うことはないのです。ちょっとつまらん