【发布时间】:2010-09-27 09:39:02
【问题描述】:
很明显getmetatable可以访问几种类型的元表:
getmetatable("")
getmetatable({})
getmetatable(newproxy(true))
但是,您似乎无法获得其他类型的元表(功能除外)。似乎无法访问数字、布尔值或 nil 的元表。
我还想知道是否可以访问整个表类型的元表。为了能够做这样的事情:
({}) + ({})
【问题讨论】:
标签: lua
很明显getmetatable可以访问几种类型的元表:
getmetatable("")
getmetatable({})
getmetatable(newproxy(true))
但是,您似乎无法获得其他类型的元表(功能除外)。似乎无法访问数字、布尔值或 nil 的元表。
我还想知道是否可以访问整个表类型的元表。为了能够做这样的事情:
({}) + ({})
【问题讨论】:
标签: lua
字符串、数字、nil、函数和 lightuserdata 对整个类型都有一个元表。表和完整的用户数据对每个实例都有一个元表。
来自文档:
表格和完整的用户数据有 个别元表(虽然 多个表和用户数据可以共享 他们的元表)。所有其他的价值观 每个类型共享一个元表 类型;也就是说,只有一个 可元用于所有数字,一为所有 字符串等字符串等
没有“表类型元表”,就像没有“此字符串的元表”一样
字符串类型默认将“字符串”表作为元表;但是您可以使用debug.setmetatable() function.strings 等为其他类型设置元表。
【讨论】:
默认情况下,数字、布尔值和 nil 没有元表(因此 getmetatable 返回 nil)。不过,您可以使用debug.setmetatable 给他们一个。
没有公共表元表。 (对于用户数据也是如此(至少是大量的))
【讨论】: