function table_max(t) local max_value = 0 for k, v in pairs(t) do if max_value < v then max_value = v end end return max_value end function table_max_index(t) local max_index = 0 for k, v in pairs(t) do if max_index < k then max_index = k end end return max_index end mytable = setmetatable({1, 2, 3}, {__add = function(mytable, newtable) for i = 1, table_max_index(newtable) do table.insert(mytable, table_max_index(mytable) + 1, newtable[i]) end return mytable end }) second_table = {4, 5, 6} mytable = mytable + second_table for k, v in ipairs(mytable) do print(k, v) end
1 1 2 2 3 3 4 4 5 5 6 6
理解setmetatable
> mytable = {} > mymetatable = {} > setmetatable(mytable, mymetatable) > print(mytable) table: 0xc60b80 > print(mymetatable) table: 0xc60e20 > print(setmetatable(mytable, mymetatable))--输出的是mytable的地址 table: 0xc60b80 > print(getmetatable(mytable)) table: 0xc60e20
更改上面的代码
function table_max(t) local max_value = 0 for k, v in pairs(t) do if max_value < v then max_value = v end end return max_value end function table_max_index(t) local max_index = 0 for k, v in pairs(t) do if max_index < k then max_index = k end end return max_index end mytable = setmetatable({0, 1, 2, 3}, {__add = function(mytable, newtable) print(table_max_index(newtable))--通过下面的输出,可以知道,输出是3 for i = 1, table_max_index(newtable) do table.insert(mytable, table_max_index(mytable) + 1, newtable[i]) end return mytable end }) second_table = {4, 5, 6} mytable = mytable + second_table for k, v in ipairs(mytable) do print(k, v) end --print(table_max_index(newtable_test))--错误
输出
3 1 0 2 1 3 2 4 3 5 4 6 5 7 6
---------------------------------------------
function table_max(t) local max_value = 0 for k, v in pairs(t) do if max_value < v then max_value = v end end return max_value end function table_max_index(t) local max_index = 0 for k, v in pairs(t) do if max_index < k then max_index = k end end return max_index end mytable = {0, 1, 2, 3} mytable = setmetatable(mytable, {__add = function(mytable, newtable) print(table_max_index(newtable)) for i = 1, table_max_index(newtable) do table.insert(mytable, table_max_index(mytable) + 1, newtable[i]) end return mytable end }) --mytable = {0, 1, 2, 3} second_table = {4, 5, 6} mytable = mytable + second_table for k, v in ipairs(mytable) do print(k, v) end --print(table_max_index(newtable_test))
输出的结果和上面是一样的。
这里的相加是两个table合并,即把第二个table里的值依次添加到第一个table中。