我想知道是否有任何方法可以逃脱__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上设置一个metatable,它已经有一个了。我知道这是不可能的,但我想问一下是否还有机会绕过?
从Lua实现这一点的唯一方法是使用debug.setmetatable
。
__metatable
的全部意义在于保护。调试库绕过了这种保护(以及其他保护),当然应该小心使用。
我只会覆盖元组。
您可以使用synapse x overridemetables()
来完成此操作。