很明显,getmetatable可以访问几种类型的元表:
getmetatable("")
getmetatable({})
getmetatable(newproxy(true))
然而,似乎你无法获得其他类型的元数据(除了函数)。似乎没有办法访问数字,布尔值或nil的元数据。
我也想知道是否能够访问整个表类型的元表。能够做这样的事情:
({}) + ({})
答案 0 :(得分:5)
字符串,数字,零,函数和lightuserdata对整个类型都有一个metatable。表和完整的userdata为每个实例都有一个元表。
来自文档:
表和完整的userdata有 个别元素(虽然 多个表和userdata可以共享 他们的metatables)。所有其他的价值观 类型共享一个metatable per 类型;也就是说,有一个单一的 适用于所有数字,适用于所有数字 字符串,等字符串等。
没有'table type metatable',就像没有'metatable for this string'一样
字符串类型默认情况下将'string'表作为metatable;但您可以使用debug.setmetatable()
function.strings等设置其他类型的元表。
答案 1 :(得分:0)
默认情况下,Numbers,Booleans和nil没有metatable(因此getmetatable返回nil
)。你可以给他们一个debug.setmetatable
。
没有常见的表格表格。 (对于userdata(至少是重型)也一样))