--[[
元表,设置另一个表作为主表的辅助
setmetatable(a,b) 设置b为a的元表,a中索引找不到就去b中找
setmetatable(a,b) 返回值为a
getmetatable(a) 返回a的元表,即b
]]
local mytable = {"Lua","Java","C#","C++"}
setmetatable(mytable, {
-- 主表索引不存在时,在元表里面找
__index = function(tab,key)
return key
end,
--更新表,如果存在则覆盖,否则新增
__newindex = function(tab,key,value)
rawset(tab,key,value)
end,
--两个表相加
__add = function(tab,newtab)
for k,v in pairs(newtab) do
table.insert(tab, v)
end
return tab
end,
--表调用参数时
__call = function(tab, param)
print("call " .. param)
return "call"
end,
--print表时使用
__tostring = function (tab)
local str = ""
for k,v in pairs(tab) do
str = str .. v .. ","
end
return str
end,
})
print(mytable[1])
mytable["name"] = "qwe"
mytable["name"] = "qwe2"
print(mytable["name"])
mytable[1] = "lua"
print(mytable[1])
print(mytable)
mytable = mytable + {"PHP","Python"}
print(mytable)
print(mytable(10))
--[[
setmetatable(command, { __index = function(t,k)
local cmd = string.upper(k)
local f = function (self, v, ...)
if type(v) == "table" then
return self[1]:request(compose_message(cmd, v), read_response)
else
return self[1]:request(compose_message(cmd, {v, ...}), read_response)
end
end
t[k] = f
return f
end})
]]
lua元表
最新推荐文章于 2025-09-03 23:41:16 发布
本文详细探讨了Lua语言中的元表机制,包括元表的概念、创建与设置,以及元表在实现面向对象编程、表行为定制等方面的应用。通过实例解析,帮助读者深入理解元表的使用和重要性。

873

被折叠的 条评论
为什么被折叠?



