Lua - table.insert 不起作用。

为什么 t:insert(9)Lua 中无效?

(我想将一个值 9 追加到表格的末尾)

t = {1,2,3}
table.insert(t, 9)  -- 可行(将 9 添加到表格 t 的末尾)
t:insert(9)         -- 不可行

我以为在一般情况下

a.f(a,x) 相当于 a:f(x) 在 Lua 中

原文链接 https://stackoverflow.com/questions/6126959

点赞
stackoverflow用户686008
stackoverflow用户686008

虽然 a:f(x) 确实只是 a.f(a,x) 的语法糖,但第二种语法不是你想要的。反向思考一下:

你尝试的函数调用是 t:insert(9)

那么你所说的语法规则应该是 t.insert(t, 9)

但是工作的函数调用是 table.insert(t, 9)

看到最后两个不一样了吗?所以你问题的答案是 insert() 不是 t 中包含的函数,而是在 "table" 中。

2011-05-25 15:31:19
stackoverflow用户596285
stackoverflow用户596285

由于 table 方法还没有与 t 关联,因此您只能通过 table.insert 语法直接调用它们,或者将 t 上的元表定义为 table,例如:

> t = {1,2,3}
> setmetatable(t, {__index=table})
> t:insert(9)
> print (t[4])
9
2011-05-25 16:00:32
stackoverflow用户2035476
stackoverflow用户2035476

你试图调用你的表中名为 insert 的条目,然而,在表 t 中没有这个条目。如果你想让它工作,那么你可以将 insert 条目设置为 table.insert。

t = {insert = table.insert, 1, 2, 3}
t:insert(9)
print(t[4]) -- 9,正如你所期望的那样
2014-03-03 16:21:00