lua - `table.insert` 如何处理 Lua 中的自定义表

标签 lua lua-table

我想知道 table.insert 在 lua 中是如何工作的?!

我问这个是因为我试图在带有 __newindex 的自定义表上使用它元方法
但似乎不叫它。有没有办法让我的自定义表格功能与 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!!

最佳答案

没有这样的元方法, table.insert 只是向指定的表插入一个新值。

local myTable = {}
table.insert(myTable, "somestring")
-- so now myTable has one value, myTable = { "somestring" }

它的工作原理如下:
local myTable = {}
myTable[#myTable + 1] = "somestring"

__newindex 元方法仅影响赋值运算符“=”,table.insert 只是一个与元表无关的单独函数,如果需要,您可以修改此函数的行为:
_tableinsert = table.insert
function table.insert(t, v)
    -- here your actions, before real function will be used
    _tableinsert(t, v)
end

我认为可以通过这种方式使您自己的元方法 __tableinsert 。

关于lua - `table.insert` 如何处理 Lua 中的自定义表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17369515/

相关文章:

lua - debug.getinfo(1, "n").name 引起的奇怪行为

lua - 从服务器接收数据时出错

lua - lua 中的 table.remove 行为异常

arrays - 从 gmatch 返回的列表在 Lua 中创建数组

lua - 为表分配变量

lua - 在 Lualin 中查找当前缓冲区 lsp 客户端

Lua 文件到数组

lua - 如果 lua number 是 double,=/<=/>= 操作总是正确的吗?

arrays - Lua: "dragging"数组中的元素序列

c - 使用 Lua C API 选择带有选择器字符串的嵌套值