コルーチン初歩の初歩

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へ戻る。
  • メイン関数が終わりに到達したらコルーチン終了。
  • 例外が発生しても終了。

とりあえず最初はこれだけ押さえといたらいいのかなと思います。