本地函数互相调用

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或者是虚拟函数,并且在不计数之后修改它,但是有没有办法绕过它?

lhf*_*lhf 5

问题是对isoddin 的调用iseven使用的是全局变量,而不是后面定义的本地变量.

使用@Egor建议的前向声明:

local iseven, isodd

function iseven(n)
...
end

function isodd(n)
...
end

...
Run Code Online (Sandbox Code Playgroud)