I understand what colon syntax does. I know what table.insert(list, value)
does. I'm also aware that I cannot create my own table t={}
and insert a value to it with t:insert(value)
. But when I do table:insert(value)
it inserts the value to table
which is supposed to a type, right? The worst thing is that I can read this value by calling table[1]
. What did I just do? How did I insert a value into a type? Why regular tables don't support colon syntax? I tried to Google it up but I just get information about tables in general, not about this particular case.
What did I just do?
The syntax A:B(C)
is nearly equivalent to A.B(A, C)
, you can check my another answer: link.
So table:insert(value)
just means table.insert(table, value)
, it inserts value
into the table table
(have nothing to do with t
).
How did I insert a value into a type?
table.insert(t, value)
Why regular tables don't support colon syntax?
Because t:insert(value)
means t.insert(t, value)
, but this regular table doesn't have the key insert
.
You can solve this by adding the function to the table
t.insert = table.insert
Or using a metatable
setmetatable(t, {__index = {insert = table.insert}})