为什么t:insert(9)
无法在 Lua 中工作?
(我想在表的末尾添加值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)
与Lua中的a:f(x)
相等
答案 0 :(得分:16)
虽然a:f(x)
只是a.f(a,x)
的语法糖,但第二种语法不是你所拥有的。通过倒退来思考:
您尝试过的函数调用是t:insert(9)
因此,您声明的语法规则为t.insert(t, 9)
但是工作函数调用是table.insert(t, 9)
看看最后两个是不一样的?所以你的问题的答案是insert()不是t
中包含的函数,它在“table”中。
答案 1 :(得分:11)
由于table
方法尚未与t
相关联,您必须通过table.insert
语法直接调用它们,或者在t
上定义元数据是table
,例如:
> t = {1,2,3}
> setmetatable(t, {__index=table})
> t:insert(9)
> print (t[4])
9
答案 2 :(得分:3)
你试图在你的表中调用一个名为insert的条目,但是,在表t中,没有条目。如果您希望它工作,您可以做的是将insert条目设置为table.insert
t = {insert = table.insert, 1, 2, 3}
t:insert(9)
print(t[4]) -- 9, as you'd expect