--lua中,每个table变量可以有独立的metatable,默认下,metatable为空 --lua metatable使用示例 Set = {} --默认metatable为空 print(getmetatable(s1)) --> nil --用来作为新创建表的metatable Set.mt = {} --定义表的加操作 Set.mt.__add = function (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 --通过表创建一个自定义表 function Set.new (t) local set = {} setmetatable(set, Set.mt) for _, l in ipairs(t) do set[l] = true end return set end --Set.tostring和Set.print用来输出表的内容 function Set.tostring (set) local s = "{" local sep = "" for e in pairs(set) do s = s .. sep .. e sep = ", " end return s .. "}" end function Set.print (s) print(Set.tostring(s)) end --定义自定义的表变量 s1 = Set.new{10, 20, 30, 50} s2 = Set.new{30, 1} --查看对应的metatable print(getmetatable(s1)) --> table: 00672B60 print(getmetatable(s2)) --> table: 00672B60 --调用metatable中的__add metamethod s3 = s1 + s2 --查看结果 Set.print(s3) --> {1, 10, 20, 30, 50}