--[[ オブジェクト指向サンプルファイル http://www2s.biglobe.ne.jp/~nunokawa/wiki.cgi?page=Lua --]] Point = {} -- レシーバ宣言 -- オブジェクトを作成するメソッドを定義 -- レシーバ:メソッド→(オブジェクト:関数) function Point.new() local a = { x, y } -- オブジェクトのx, yの値を返す。; self.x == a.x -- a:getX = function() return self.x; end -- a.getX = function(self) return self.x; end -- a["getX"] = function(self) return self.x; end function a:getX() return self.x; end function a:getY() return self.y; end -- オブジェクトのx, yに値をセットする。 function a:setX(xx) self.x = xx; end function a:setY(yy) self.y = yy; end return a -- オブジェクトの値とする。 end -- オブジェクトA a = Point:new() -- オブジェクト作成 a:setX(100) a:setY("abc") print(a:getX()) print(a:getY()) -- オブジェクトB b = Point:new() b:setX(100) print(b:getX()) --[[ 結果: 100 abc 100 --]] -- 以下の関数・式は全部同じ処理。 Point["print"] = function(Point, str) print(str) end -- 本来の式 --function Point.print(Point, str) print(str) end --function Point:print(str) print(str) end Point:print("ABCDEF") print("---") a = Point -- 関数をコピー a:print("ABC")