【问题标题】:Accessing Type Metatables Lua访问类型元表 Lua
【发布时间】:2010-09-27 09:39:02
【问题描述】:

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

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

但是,您似乎无法获得其他类型的元表(功能除外)。似乎无法访问数字、布尔值或 nil 的元表。

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

({}) + ({})

【问题讨论】:

    标签: lua


    【解决方案1】:

    字符串、数字、nil、函数和 lightuserdata 对整个类型都有一个元表。表和完整的用户数据对每个实例都有一个元表。

    来自文档:

    表格和完整的用户数据有 个别元表(虽然 多个表和用户数据可以共享 他们的元表)。所有其他的价值观 每个类型共享一个元表 类型;也就是说,只有一个 可元用于所有数字,一为所有 字符串等字符串等

    没有“表类型元表”,就像没有“此字符串的元表”一样

    字符串类型默认将“字符串”表作为元表;但是您可以使用debug.setmetatable() function.strings 等为其他类型设置元表。

    【讨论】:

      【解决方案2】:

      默认情况下,数字、布尔值和 nil 没有元表(因此 getmetatable 返回 nil)。不过,您可以使用debug.setmetatable 给他们一个。

      没有公共表元表。 (对于用户数据也是如此(至少是大量的))

      【讨论】:

      • 谢谢。只是想知道。
      猜你喜欢
      • 2016-08-09
      • 2011-07-30
      • 2022-06-14
      • 2014-06-09
      • 2020-12-18
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 2017-03-07
      相关资源
      最近更新 更多