很明显,getmetatable可以访问多种类型的元表:
getmetatable("")
getmetatable({})
getmetatable(newproxy(true))
但是,似乎您无法获取其他类型的元表(除了函数之外)。似乎无法访问数字、 bool 值或 nil 的元表。
我还想知道是否能够访问整个表类型的元表。能够做这样的事情:
({}) + ({})
最佳答案
字符串、数字、nil、函数和 lightuserdata 的整个类型都有一个元表。表和完整的用户数据每个实例都有一个元表。
来自文档:
Tables and full userdata have individual metatables (although multiple tables and userdata can share their metatables). Values of all other types share one single metatable per type; that is, there is one single metatable for all numbers, one for all strings, etc.strings, etc.
没有“表类型元表”,就像没有“此字符串的元表”一样
字符串类型默认将“string”表作为元表;但您可以使用 debug.setmetatable()
function.strings 等设置其他类型的元表。
关于lua - 访问 Lua 类型元表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3781816/