use*_*072 4 recursion lua function local
我有两个偶尔相互调用的函数,它们是一个模块的本地函数,它使用它们来构建另一个函数.该模块有点类似于这段代码:
local function iseven(n)
if n == 1 then
return false
else
return isodd(n - 1)
end
end
local function isodd(n)
if n == 1 then
return true
else
return iseven(n - 1)
end
end
local evenOrOdd = function(n)
return iseven(n) and "Even" or "Odd"
end
return evenOrOdd
Run Code Online (Sandbox Code Playgroud)
问题是,当evenOrOdd从另一个文件调用时,我得到了错误attempt to call global 'isodd' (a nil value).
我注意到如果我设置iseven为global,这不会发生,但我想将它们保留在我的模块本地.
我甚至尝试在声明local function isodd() end的行之前放置一个虚函数声明()iseven.我也尝试插入local isodd虚拟函数声明的位置,但在两种方式它都不起作用,我得到不同类型的错误.
我知道这是因为Lua有闭包,当iseven声明它捕获实际值isodd,nil或者是虚拟函数,并且在不计数之后修改它,但是有没有办法绕过它?
问题是对isoddin 的调用iseven使用的是全局变量,而不是后面定义的本地变量.
使用@Egor建议的前向声明:
local iseven, isodd
function iseven(n)
...
end
function isodd(n)
...
end
...
Run Code Online (Sandbox Code Playgroud)