我想知道table.insert在lua中是如何工作的?!
我问这个是因为我试图在__newindex
metamethod 的自定义表上使用它但似乎没有调用它.有没有办法让我的自定义表功能与table.insert一起使用?!
从我对语言的谦虚知识,我会说它使用类似的rawset
东西,或许我不知道.
我工作的样本:
do
tabl = {1,2,3}
local _tabl = tabl
tabl = {}
local mt = { __newindex = function(t,k,v) print"changing" ;_tabl[k] = v end, __index = _tabl}
setmetatable(tabl,mt)
end
tabl[4] = 4; --prints "changing"
table.insert(tabl,5) -- prints nothing!!
Run Code Online (Sandbox Code Playgroud)
没有这样的元方法,table.insert只是将新值插入到指定的表中.
local myTable = {}
table.insert(myTable, "somestring")
-- so now myTable has one value, myTable = { "somestring" }
Run Code Online (Sandbox Code Playgroud)
它的作用如下:
local myTable = {}
myTable[#myTable + 1] = "somestring"
Run Code Online (Sandbox Code Playgroud)
__newindex metamethod只影响赋值运算符"=",table.insert只是一个与metatable不相关的独立函数,如果需要,可以修改此函数的行为:
_tableinsert = table.insert
function table.insert(t, v)
-- here your actions, before real function will be used
_tableinsert(t, v)
end
Run Code Online (Sandbox Code Playgroud)
我认为可以用这种方式制作你自己的metamethod __tableinsert.