学习lua有一段时间了,今天终于学会了怎么使用元表,还有用lua表模拟类,综合实例讲解,用lua元表模拟C++模板和类
下面是我工作实践操作的实例,测试通过,非常容易扩展其他元方法
-- 源码
local SET = {} -- 模拟C++类
local mt = {} -- 元模板
--// 建立新表
function SET.new(tb)
local set = {}
setmetatable(set,mt)
for k,v in ipairs(tb) do
set[k] = v
-- print("init v:"..v)
end
return set
end
--// 元方法
function SET.add(a,b)
local res = SET.new{0,0,0,0}
for k,v in pairs(res) do
res[k] = a[k] + b[k]
end
return res
end
--// 测试打印
function SET.print(s)
for k,v in pairs(s) do
print("s["..k.."]:"..v)
end
end
-- 设置元方法
mt.__add = SET.add
--// 测试
s1 = SET.new{10,20,30,50}--{10,20,30,50} --
s2 = SET.new{6,7,8,9}--{6,7,8,9} --
setmetatable(s1,mt)
setmetatable(s2,mt)
--//print(getmetatable(s1))
--//print(getmetatable(s2))
local s3 = {0,0,0,0}
s3 = s1 + s2
print("print"..#s1..","..#s2)
SET.print(s3)