【Lua】コルーチン
Luaコード内でコルーチンを生成して実行する
-- コルーチンを生成する -- ループ数を表示し、中断数を返却する local co = coroutine.create( function(x) -- 直接代入するので無名関数 for i = 0, x do print("loop count: " .. i) coroutine.yield("yield return: " .. i) end end ) -- コルーチンの実行が完了するまでループさせる -- 生成したコルーチンから実行フラグと戻り値を取得して表示させる while true do local a, b = coroutine.resume(co, 5) if coroutine.status(co) == "dead" then break end if a then print(b) end end -- functionとしてコルーチンを生成する -- functionなのでcoroutineがもつメソッドは使用不可 local co = coroutine.wrap( function(x) while true do -- 四則演算の途中で中断することで -- 次に受け取る引数と演算させる x = x * coroutine.yield() print(x) end end ) co(2) co(3) -- 6を表示 co(2) -- 12を表示