コルーチン初歩の初歩
Lua 5.1 ¥ê¥Õ¥¡¥ì¥ó¥¹¥Þ¥Ë¥å¥¢¥ëを参考にコルーチンがなんとなくわかったので、エキスパートPythonプログラムのP.70の例っぽいものをLuaで書いてみました。
function func(x) for i=0,3 do print(x..i) coroutine.yield() end end co1 = coroutine.create(func) co2 = coroutine.create(func) while true do r1 = coroutine.resume(co1, "A") r2 = coroutine.resume(co2, "B") if (r1 and r2) == false then break end end
これを実行すると
A0 B0 A1 B1 A2 B2 A3 B3
ちゃんと交互に呼ばれてますね。
かんたんにまとめ
- coroutine.createでコルーチンを生成。
- coroutine.resumeでコルーチン開始/再開
- coroutine.yieldで対応するcoroutine.resumeへ戻る。
- メイン関数が終わりに到達したらコルーチン終了。
- 例外が発生しても終了。
とりあえず最初はこれだけ押さえといたらいいのかなと思います。