gpt4 book ai didi

function - 本地函数相互调用

转载 作者:行者123 更新时间:2023-12-05 00:18:14 24 4
gpt4 key购买 nike

我有两个偶尔互相调用的函数,它们是使用它们构建另一个函数的模块的本地函数。该模块有点类似于这段代码:

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 的行之前放置一个虚拟函数声明( iseven )被宣布。我也尝试只插入 local isodd代替虚拟函数声明,但在这两种方式中它都不起作用,我得到不同类型的错误。

我知道这是因为 Lua 有闭包,当 iseven声明它捕获 isodd 的实际值,即 nil或虚拟函数,之后修改它不算数,但是有没有办法绕过这个?

最佳答案

问题是对 isodd 的调用在 iseven使用全局变量,而不是稍后定义的局部变量。

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

local iseven, isodd

function iseven(n)
...
end

function isodd(n)
...
end

...

关于function - 本地函数相互调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38502549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com