因此,在我的游戏中,大多数开发者都在使用元表来停止禁令,而我想打破它们,我不使用它们,这只会伤害开发者。即使这破坏了lua的其他部分,我也可以并且会解决它,但这需要停止,这是我最好的选择。
答案 0 :(得分:0)
摘自 Lua编程第四版,第20章:
函数
setmetatable
和getmetatable
也使用一个metafield,在这种情况下是为了保护metatables。 假设我们要保护自己的集合,以使用户既看不到也不更改其元表。如果我们在元表中设置了__metatable
字段,则getmetatable将返回该字段的值,而setmetatable将引发错误:
mt.__metatable = "not your business"
s1 = Set.new{}
print(getmetatable(s1)) --> not your business
setmetatable(s1, {})
stdin:1: cannot change protected metatable
那么,你的答案呢?设置__metatable
字段可防止访问表的元表。对所有需要保护的表执行此操作。