--[[ 連想配列とその表記のシンタックスシュガー、 関数がファーストクラスオブジェクトであることを利用して、 オブジェクトを定義できます (正確にはそれらしく見せることができる)。 http://antun.net/tips/script/lua.html http://f42.aaa.livedoor.jp/~nemucat/pukiwiki14/pukiwiki.php?cmd=read&page=%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB%2FLua%B9%D6%BA%C2%2FTips%28%BE%AE%A5%CD%A5%BF%29#content_1_5 http://www.lua.org/pil/16.5.html --]] HogeClass={} function HogeClass.new(value) local hogeObject = { value = value, toString = function(self) return "HogeClass: value="..tostring(value) end } return hogeObject end HogeHogeClass={} function HogeHogeClass.new(value) local hogehogeObject = { toPlusOneString = function(self2) return "HogeHogeClass: value="..tostring(value+1) end } local extends=HogeClass.new(value) setmetatable(hogehogeObject,{__index=extends}) return hogehogeObject end obj3=HogeHogeClass.new(9) print(obj3.value) print(obj3.toString(value)) print(obj3:toPlusOneString()) print(obj3.toPlusOneString(self2)) print(obj3["toPlusOneString"](self2)) print(obj3:toString()) -- 実行結果は "HogeHogeClass: value=10", "HogeClass: value=9"