Lua - table.insert не работает - PullRequest
9 голосов
/ 25 мая 2011

Почему 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) равнозначно a:f(x) в Lua

Ответы [ 3 ]

16 голосов
/ 25 мая 2011

Хотя верно, что a:f(x) является просто синтаксическим сахаром для a.f(a,x), второй синтаксис не тот, что у вас там.Подумайте об этом в обратном направлении:

Вы пытались вызвать функцию t:insert(9)

Таким образом, указанное вами синтаксическое правило будет t.insert(t, 9)

Но вызов рабочей функции table.insert(t, 9)

Видите, как последние два не совпадают?Таким образом, ответ на ваш вопрос заключается в том, что insert () не является функцией, содержащейся в t, она находится в «таблице».

11 голосов
/ 25 мая 2011

Поскольку методы table не были связаны с t, вы должны либо вызывать их напрямую с помощью синтаксиса table.insert, либо определить метатаблицу в t как table, например:

> t = {1,2,3}
> setmetatable(t, {__index=table})
> t:insert(9)
> print (t[4])
9
3 голосов
/ 03 марта 2014

Вы пытаетесь вызвать запись в своей таблице с именем insert, однако в таблице t ее нет.Если вы хотите, чтобы это работало, вы можете установить запись вставки в table.insert

t = {insert = table.insert, 1, 2, 3}
t:insert(9)
print(t[4]) -- 9, as you'd expect
...