我有两个偶尔互相调用的函数,它们对于使用它们构建另一个函数的模块来说是本地的。该模块与这段代码有点相似:
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
问题是,当调用evenOrOdd
从另一个文件我收到错误attempt to call global 'isodd' (a nil value)
.
我注意到如果我设置的话就不会发生这种情况iseven
全局,但我想将它们保留在我的模块本地。
我什至尝试放置一个虚拟函数声明(local function isodd() end
) 在 where 行之前iseven
被宣布。我也尝试插入local isodd
代替虚拟函数声明,但在这两种方式中它都不起作用,并且我收到不同类型的错误。
我知道这是因为 Lua 有闭包,当iseven
被声明它捕捉到的实际值isodd
,这是nil
或者虚拟函数,之后修改它不算数,但是有没有办法绕过这个?
问题是调用isodd
in iseven
uses a global变量,而不是稍后定义的本地变量。
按照@Egor的建议使用前向声明:
local iseven, isodd
function iseven(n)
...
end
function isodd(n)
...
end
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)