Lua __metatable绕过?

我想知道是否有任何方法可以避免 __metatable 元方法。我知道没有,但我正在尝试像这样做,但显然 __metatable 阻止了这种情况的发生:

    -- 假设一个表被赋予 __metatable 字段
    setmetatable(_G, {__index = {None="No indexes"}})
    -- 错误:(给 __metatable 元方法的字符串)

我正在尝试做的是简单地越过 __metatable 字段,并允许自己在已经有一个元表的 _G 上设置元表。 我知道这是不可能的,但我想问一下是否还有绕过的机会?

点赞
用户107090
用户107090

从 Lua 中实现这一点的唯一方法是使用 debug.setmetatable

__metatable 的全部意义在于保护。调试库绕过这种保护(以及其他保护),当然需要小心使用。

2015-03-29 13:06:29
用户14544316
用户14544316

我只需覆盖 metatables。

您可以使用 synapse x overridemetables() 来实现。

2020-11-17 18:42:02