|
本帖最后由 arklr73021 于 2025-3-28 23:39 编辑
lua 第六课 元方法
--元方法--**********************************************
--提供一个table的拓展方法
--元表
--面向过程
man1 = {name="张三",money=233}
man2 = {name="李四",money=223}
function add(man1,man2)
print(man1.money + man2.money)
end
add(man1,man2)
-- 面向对象
man1 = {name="张三",money=233,Yuanbao=269}
man2 = {name="李四",money=223,Yuanbao=111}
meta = { --定义元表
__add = function (a,b)
return {Yuanbao = a.Yuanbao + b.Yuanbao}
end,
__sub = function (a,b)
return {Yuanbao = a.Yuanbao - b.Yuanbao}
end
}
setmetatable(man1,meta) -- 设置元表
setmetatable(man2,meta) -- 设置元表
c = man1 - man2
d = man1 + man2
print(c.Yuanbao)
print(d.Yuanbao)
--定义表
local tb = {name="张三",name2="李四"}
meta = {
__index = function (k,v)
print("你要的"..v.."不存在")
end
}
setmetatable(tb,meta)
print(tb.name2)
local tb = {["1"]=13,["2"]=12}
meta = {
__index = function (k,v)
if v == "传送" then
print("打开传送面板")
elseif v == "合成" then
print("打开合成面板")
end
end
}
setmetatable(tb,meta)
print(tb["合成"])
--构造函数
local tb = {}
tb.__index = tb
function tb:ff(v)
local newtb = {v = v}
setmetatable(newtb,tb)
return newtb
end
aa = tb:ff(123)
for k , v in pairs(aa) do
print(k,v)
end
lua 第六课 元方法
--元方法--**********************************************
--提供一个table的拓展方法
--元表
--面向过程
man1 = {name="张三",money=233}
man2 = {name="李四",money=223}
function add(man1,man2)
print(man1.money + man2.money)
end
add(man1,man2)
-- 面向对象
man1 = {name="张三",money=233,Yuanbao=269}
man2 = {name="李四",money=223,Yuanbao=111}
meta = { --定义元表
__add = function (a,b)
return {Yuanbao = a.Yuanbao + b.Yuanbao}
end,
__sub = function (a,b)
return {Yuanbao = a.Yuanbao - b.Yuanbao}
end
}
setmetatable(man1,meta) -- 设置元表
setmetatable(man2,meta) -- 设置元表
c = man1 - man2
d = man1 + man2
print(c.Yuanbao)
print(d.Yuanbao)
--定义表
local tb = {name="张三",name2="李四"}
meta = {
__index = function (k,v)
print("你要的"..v.."不存在")
end
}
setmetatable(tb,meta)
print(tb.name2)
local tb = {["1"]=13,["2"]=12}
meta = {
__index = function (k,v)
if v == "传送" then
print("打开传送面板")
elseif v == "合成" then
print("打开合成面板")
end
end
}
setmetatable(tb,meta)
print(tb["合成"])
--构造函数
local tb = {}
tb.__index = tb
function tb:ff(v)
local newtb = {v = v}
setmetatable(newtb,tb)
return newtb
end
aa = tb:ff(123)
for k , v in pairs(aa) do
print(k,v)
end
|
|