Lua-我将如何破坏元表或使其无法使用?

时间:2018-08-26 02:28:14

标签: lua metatable

因此,在我的游戏中,大多数开发者都在使用元表来停止禁令,而我想打破它们,我不使用它们,这只会伤害开发者。即使这破坏了lua的其他部分,我也可以并且会解决它,但这需要停止,这是我最好的选择。

1 个答案:

答案 0 :(得分:0)

摘自 Lua编程第四版,第20章:

  

函数setmetatablegetmetatable也使用一个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字段可防止访问表的元表。对所有需要保护的表执行此操作。

相关问题