访问类型Metatables Lua

时间:2010-09-23 19:26:10

标签: lua

很明显,getmetatable可以访问几种类型的元表:

getmetatable("")
getmetatable({})
getmetatable(newproxy(true))

然而,似乎你无法获得其他类型的元数据(除了函数)。似乎没有办法访问数字,布尔值或nil的元数据。

我也想知道是否能够访问整个表类型的元表。能够做这样的事情:

({}) + ({})

2 个答案:

答案 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(至少是重型)也一样))