備忘録

プログラムやゲーム関連に関すること

【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を表示