luaにはswitch文がありません。
if~elseif~で頑張ってもいいけど、もう少しスマートに書きたいところです。
luaのテーブルを使ってswitchぽい書き方ができます。
サンプルとして enumぽい定義を書いて、switchぽい関数を書いてみました。
C言語の懐かしい関数テーブルと同じ要領です。
SwitchMainにstateIdを渡すと対応する関数にジャンプするので、switchぽいことができます。
-- enumぽい定義
local StateId = {
Idle = 1,
Run = 2,
Attack = 3,
}
-- switchぽい関数分岐
function SwitchMain(stateId, arg)
local switchCase={}
switchCase[StateId.Idle] = SwitchCaseIdle
switchCase[StateId.Run] = SwitchCaseRun
switchCase[StateId.Attack] = SwitchCaseAttack
switchCase[stateId](arg)
end
function SwitchCaseIdle(arg)
end
function SwitchCaseRun(arg)
end
function SwitchCaseAttack(arg)
end
このサンプルではargで引数を1つ取れるようにしました。
実体は関数テーブルなので形式に縛りはありますが、いろいろ使い勝手が良いです。
上記のようなStateごとの分岐や、AIの思考フェーズなど大きなカテゴリでの分岐に向いてます。