10

为什么不在Luat:insert(9)中工作? (我想在表的末尾附加一个值 9)

t = {1,2,3}
table.insert(t, 9)  -- works (appends 9 to end of table t)
t:insert(9)         -- does NOT work

我一般认为

a.f(a,x)等同a:f(x)于 Lua

4

3 回答 3

16

虽然确实a:f(x)是第二种语法的简单语法糖a.f(a,x)并不是您所拥有的。反过来想一想:

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

所以你所说的语法规则是t.insert(t, 9)

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

看看最后两个怎么不一样?因此,您的问题的答案是 insert() 不是包含在中的函数t,而是在“表”中。

于 2011-05-25T15:31:19.640 回答
11

由于table方法尚未与 关联,您要么必须通过语法t直接调用它们,要么将元表定义为 be ,例如:table.insertttable

> t = {1,2,3}
> setmetatable(t, {__index=table})
> t:insert(9)
> print (t[4])
9
于 2011-05-25T16:00:32.047 回答
3

您试图在表中调用一个名为 insert 的条目,但是,在表 t 中,没有。如果你想让它工作,你可以做的是将插入条目设置为 table.insert

t = {insert = table.insert, 1, 2, 3}
t:insert(9)
print(t[4]) -- 9, as you'd expect
于 2014-03-03T16:21:00.697 回答