Table access metamethods

  • __index is called for the [] operator
  • __newindex is called for [] used as an assignment (a[3] = value)

The __index and __newindex metamethods are only called when the table does not have a value defined for a given index. For example, given t = { ["a"] = 123, ["b"] = 456}, if t has a metatable with the __index method defined, the __index metamethod would not be called for t["a"] but it would be called for t["foo"].

Example
mt={}
mt["__newindex"] = function(t,index,value)
if type(index) != "number" then
error("Can only use numbers for table keys!",0)
end
rawset(t,index,value) -- use rawset to ignore metamethods
end
t={["foo"]=33}

setmetatable(t,mt)

t["foo"] =	99	--> ok (t["foo"] already defined)
t["bar"]	=	11	--> error
t[123] =	456	--> ok