为什么不在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
虽然确实a:f(x)
是第二种语法的简单语法糖a.f(a,x)
并不是您所拥有的。反过来想一想:
您尝试的函数调用是t:insert(9)
所以你所说的语法规则是t.insert(t, 9)
但是工作函数调用是table.insert(t, 9)
看看最后两个怎么不一样?因此,您的问题的答案是 insert() 不是包含在中的函数t
,而是在“表”中。
由于table
方法尚未与 关联,您要么必须通过语法t
直接调用它们,要么将元表定义为 be ,例如:table.insert
t
table
> t = {1,2,3}
> setmetatable(t, {__index=table})
> t:insert(9)
> print (t[4])
9
您试图在表中调用一个名为 insert 的条目,但是,在表 t 中,没有。如果你想让它工作,你可以做的是将插入条目设置为 table.insert
t = {insert = table.insert, 1, 2, 3}
t:insert(9)
print(t[4]) -- 9, as you'd expect