メタテーブルを使うと、演算子オーバーロドと、テーブルをクラスのように使うことができる。
演算子オーバーロード
__add のように__から始まるメソッドはメタメソッドという。
__indexがでの取得で、__newindexがでの値セット時に呼ばれるメタメソッド。
これら以外のメタメソッドは以下を参照。
http://milkpot.sakura.ne.jp/lua/lua51_manual_ja.html#2.8
t1 = { value=20} t2 = { value=30} -- + 演算子のメソッドを定義. mt = { __add = function(l, r) return l.value + r.value end } -- 定義したメソッドをセット setmetatable( t1, mt) print( t1 + t2 )
クラス定義
クラス定義と、座標をセットするメソッド、表示するメソッドを定義
Point = {} function Point:new() local t = {} t.x = 0 t.y = 0 -- local value t へ値をセットするメソッドを追加 setmetatable( t, {__index = Point}) return t end function Point:set(dx, dy) self.x = dx self.y = dy end function Point:display() print( 'x '..self.x..', '..'y '..self.y ) end local pt1 = Point:new() pt1:set( 33, 44 ) pt1:display()