Lua

仕事で使うので、理解を深めるために取り合えずサンプルを自分で0から書き起こすことにした。
日本語ヘルプを読んでいてLua文法でのyield/resume周りの挙動がちょっと分かりにくかったので自分用にまとめた。

コルーチン内部ではyield
コルーチン監視側はresume


コルーチンの開始はresumeで行う
1,最初のresumeの引数は、コルーチンの関数の引数として機能する。
2,コルーチンを中断する時にyieldに引数を渡すと、そのresumeの戻り値として受け取れる。
3,次にコルーチンを再開する時にresumeに引数を渡すと、最後に呼ばれたyieldの戻り値として処理が再開される


以降2,3を繰り返す。

こんな感じ


メイン             コルーチン
resume(a) コルーチンの開始 → コルーチンの引数 == a
resume(a)の戻り値 == x   ← yield(x)で停止してメインに処理を返す
resume(b)          → yield(x)の戻り値 == b


この文法に依存した書き方になると、お互いのフローの状況を把握しなきゃいけないからスパゲッティになること請け合い。
なので普段は引数、戻り値は終了チェックぐらいにしておくのがいいんじゃないかな。
ヘルプみたいなコードを書くと地獄をみると思うというかそんなサンプルソースをヘルプに乗せないで欲しいw


暇があったらProce55dlにも組み込んで遊んでみよう。