strings, numbers, zero, functions, and lightuserdata have one metatable for the whole type. Tables and full user data have metadata for each instance.
from documents:
Tables and full user data have separate meta tags (although multiple tables and user data can share their meta tags). Values โโof all other types share one single metatet type; i.e. one metatable for all numbers, one for all strings, etc., etc.
there is no 'metatable table type', just as there is no 'metatable for this row'
the row type has the table "string" as metatetable by default; but you can set the meta for other types using debug.setmetatable()
function.strings, etc.
source share