【发布时间】:2020-08-27 16:21:28
【问题描述】:
通常沙盒会阻止 setmetatable,如下所示:
local function memoize(f)
local mt = {}
local t = setmetatable({}, mt)
function mt:__index(k)
local v = f(k)
t[k] = v
return v
end
return t
end
问题是,我不想使用 setmetatable。它到底是什么,我将如何解决它?在上述情况下,它只是一个作为复制“mt”变量的全局变量吗?有什么具体的我应该做的吗?
谢谢。
【问题讨论】:
-
我不确定你到底在问什么。你可以很容易地禁用
setmetatable,就像使用任何 Lua 沙箱一样。您是在问如何让某人仍然获得setmetatable的效果而不调用它,或者调用它的更“安全”版本?您到底想避免哪些安全问题?
标签: lua lua-table metatable nlua