pythonと同じ方針。メタメソッドに他の一般メソッドの参照を代入する
Set = {} local _mtSet = {} --> メタテーブル用 function Set.new (l) local set = {} setmetatable(set, _mtSet) --> newで必ず、テーブルに対してメタテーブルが用意されるようにする。 for _, v in ipairs(l) do set[v] = true end return set end function Set.union(a, b) local res = Set.new{} for k in pairs(a) do res[k] = true end for k in pairs(b) do res[k] = true end return res end s1 = Set.new{10, 20, 30, 50} s2 = Set.new{30, 1, 60} print(getmetatable(s1)) --> table : 00000000xxxxx1 print(getmetatable(s2)) --> table : 00000000xxxxx2 _mtSet.__add = Set.union --> メタテーブル __add に代入する(ことで、「+」の振る舞いを変える s3 = s1 + s2 --->s3 = Set.union(s1, s2) --> {1,10,20,30,50, 60}