読者です 読者をやめる 読者になる 読者になる

プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

Luaでメソッドチェーン2

大した話ではないけど前回の続き。

アクションクラスの一部を修正する

function Action:die()
	print(self.name .. "は死んだ")
	coroutine.yield(true)
	return self
end

メイン

taro = Action:new{name = "太郎"}
move = coroutine.wrap(function ()
	taro:left():left():left():die():right():right():right()
	return true
end)

repeat
	--アクションの合間の何らかの処理
until move()

出力

太郎は左へ行った
太郎は左へ行った
太郎は左へ行った
太郎は死んだ

die()のyieldでtrueを返すように変更することで、後半の「:right():right():right()」が実行されなくなる。
終了のタイミングをチェーンの要素内から指定できる。