-
元表的理解
在我看来元表就相当于是一个存放很多方法的一个table。它的value值就是对应的元方法,这里只是做一个简单的解释。
-
元方法的使用
1.__add 的简单使用方法
对两个table之间使用加法,加法的规则根据自己设置,我这里只是做一个简单的数值之间的加法示例:
function t()
local mt = {}
mt.__add = function(tbl_a,tbl_b)
local tbl_new = {}
for k,v in pairs(tbl_a) do
for i,j in pairs(tbl_b) do
if k == i and type(v) == type(0) and type(j) == type(0) then
tbl_new[k] = v + j
break
end
end
end
return tbl_new
end
local tbl_a = {1,2,3}
local tbl_b = {2,3,4}
setmetatable(tbl_a,mt)
setmetatable(tbl_b,mt)
local tbl_c = tbl_a + tbl_b
for k,v in pairs(tbl_c) do
print(v)
end
end
2.__index元方法
__index顾名思义就是元表里面的搜索元方法,当在一个table中索引一个键值的找不到的时候,当添加了__index这个元方法就会
在该方法的表格中进行搜索,相当于继承了__index对应的table。
function index_t()
local mt = {["student"] = "hqyd",["teacher"] = "hqyd_teacher"}
local tmp_tbl = {["student"] = "hqyd"}
setmetatable(tmp_tbl,{__index=mt})
print(tmp_tbl.teacher)
end