访问类型Metatables Lua

Q2F*_*b3k 2 lua

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

getmetatable("")
getmetatable({})
getmetatable(newproxy(true))
Run Code Online (Sandbox Code Playgroud)

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

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

({}) + ({})
Run Code Online (Sandbox Code Playgroud)

Jav*_*ier 5

strings,numbers,nil,functions和lightuserdata对整个类型都有一个metatable.table和full userdata为每个实例都有一个metatable.

来自文档:

表和完整的userdata具有单独的元表(尽管多个表和userdata可以共享其元表).所有其他类型的值每种类型共享一个metatable; 也就是说,所有数字都有一个metatable,一个用于所有字符串,等等.strings等.

没有'table type metatable',就像没有'metatable for this string'

字符串类型默认情况下将'string'表作为metatable; 但您可以使用debug.setmetatable()function.strings等为其他类型设置元表.