我想知道是否有任何方法可以逃脱__metatable元方法。我知道没有,但我正在尝试这样做,但显然__metatable阻止了这种情况的发生:
-- pretend that there is a __metatable field given to a table
setmetatable(_G, {__index = {None="No indexes"}})
-- error: (the string given to the __metatable metamethod)我在这里尝试做的是简单地跳过__metatable字段,并简单地允许我自己在已经有一个元表的_G上设置一个元表。我知道这是不可能的,但我想问一下,是否还有机会绕过?
发布于 2015-03-29 21:06:30
在Lua中实现这一点的唯一方法是使用debug.setmetatable。
__metatable的全部意义在于保护。调试库绕过了这个保护(和其他保护),当然应该小心使用。
发布于 2020-11-18 02:42:02
我只会重写这些metables。
您可以使用synapse x overridemetables()来实现这一点。
https://stackoverflow.com/questions/29329377
复制相似问题