我找到了一个关于 post hooking 的主题,但我认为这与我想要完成的事情不同。 我发现的话题
我需要的是以下内容:
local someBoolean = false
function doSomething() -- this is the function used in __index in a proxy table
someBoolean = true
return aFunction -- this is function that we can NOT alter
end
我需要能够在返回后运行代码“someBoolean = false”......(是的,我知道这不应该发生:p)考虑到 aFunction 本身可能包含其他函数,我希望 someBoolean 对整个都是真的aFunction 的作用域,但在那之后,它必须变回 false
如果我没有设法解释得足够好,我很抱歉。复制粘贴我实际项目的相关代码会太大,我不想浪费你的时间。我已经被困了一段时间了,我似乎无法弄清楚......
(编辑:我不能只在函数后面加上 someBoolean = false ,因为该函数实际上是代理表上的 __index 函数)
编辑:相关的一段代码。我希望它有点清楚
local function objectProxyDelegate(t, key)
if not done then -- done = true when our object is fully initialised
return cls[key] -- cls is the class, newinst is the new instance (duh...)
end
print("trying to delegate " .. key)
if accessTable.public[key] then
print(key .. " passed the test")
objectScope = true
if accessTable.static[key] then -- static function. return the static one
return cls[key] -- we need to somehow set objectScope back to false after this, otherwise we'll keep overriding protected/private functions
else
return newinst[key]
end
elseif objectScope then
print("overridden protected/private")
return cls[key]
end
if accessTable.private[key] then
error ("This function is not visible. (private)", 2)
elseif accessTable.protected[key] then
error ("This function is not visible to an instance. (protected)", 2)
else
error ("The function " .. key .. " doesn't exiist in " .. newinst:getType(), 2) -- den deze...
end
end