Lua中能否重写库函数?本地重写报错求解决方案
解决Lua重写库函数返回值的问题
问题分析
你之前的代码存在两个核心问题:
- 语法错误:Lua不支持
local r.functionName()这类写法,带点的变量无法直接用local声明;直接写r.functionName()后接函数体也是语法错误,正确的函数赋值格式应为r.functionName = function(...)。 - 栈溢出:新函数里直接调用
r.functionName()会触发无限递归——因为你已经用新函数覆盖了原函数,调用它等于调用自身,循环往复导致栈溢出。
正确实现代码
先保存原函数的引用,再重新定义目标函数:
-- 先保存原函数副本,避免递归调用 local originalFunc = r.functionName -- 重写r.functionName r.functionName = function(...) -- 调用原函数,传递所有传入参数 local discardVar, keepVar = originalFunc(...) -- 仅返回原函数的第二个返回值 return keepVar end
代码说明
- 提前把原函数存到
originalFunc变量中,确保新函数调用的是真正的原函数,不会触发递归。 - 用
...接收所有传入参数,保证原函数能获取到正确的输入。 - 调用原函数后丢弃第一个返回值,只返回需要的第二个值。
内容的提问来源于stack exchange,提问作者Max Well
相关产品推荐
相关产品推荐

