--[[ Luaでのオブジェクト指向 setmetatable ( インスタンス, { __index=クラス } ) setmetatableを使うと、テーブルをオブジェクトのように扱うことが出来ます。 上の例ではインスタンスとクラスはそれぞれテーブルです。 http://f42.aaa.livedoor.jp/~nemucat/pukiwiki14/pukiwiki.php?%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB%2FLua%B9%D6%BA%C2%2FTips(%BE%AE%A5%CD%A5%BF) 継承 オブジェクト指向をするのであれば、やはり継承をしたくなります。 メタテーブルによって結構深いところまで探してくれるので 継承は次のような方法で行います。 --]] Parent = {} --親クラス function Parent.new(a) tmp = { val = a } return setmetatable(tmp, { __index = Parent }) end function Parent:talk() return "I am parent" .. self.val end function Parent:getVal() return self.val end ---------------------------------------------- --子クラス Child = {} --親クラスをメタテーブルに設定しておく setmetatable(Child, { __index = Parent }) function Child.new(a) tmp = { val = a } --あらためて子クラスをメタテーブルに設定 return setmetatable(tmp, { __index = Child }) end --talkをオーバーライド function Child:talk() return "I am Child" .. (self.val * 2) end ---------------------------------------------- child = nil parent = nil --function OnInit() parent = Parent.new(3) child = Child.new(4) --end --function OnFrame() print(3, parent:talk()) print(4, parent:getVal()) print(0, child:talk()) print(1, child:getVal()) --end