gpt4 book ai didi

Corona SDK中递归函数中的Lua堆栈溢出

转载 作者:行者123 更新时间:2023-12-04 02:40:50 26 4
gpt4 key购买 nike

由于某些原因,如果 else 语句执行太多次,下面的代码会抛出堆栈溢出错误。我试图让 scene.targeting 函数从参数中传递的 objTable 中选择一个目标,但只有带有 .tgtFlag == false 的目标才是有效选择。如果该函数选择了一个具有 .tgtFlag == true 的目标,它会调用传入同一组参数的 scene.targeting 函数。

中断的行是 local theTarget = params.objTable[math.random( 1, #params.objTable )] 但仅在 else scene.targeting(params) end 之后code> 被多次调用。

如有任何帮助,我们将不胜感激。

function scene.targeting( params ) -- Targeting functions

function animateTarget( target )
if target.savedFlag == false then
transition.to( target, {time = 100, y = target.y - 15} )
transition.to( target, {time = 100, delay = 150, y = target.y, onComplete = animateTarget} )
end
end

local theTarget = params.objTable[math.random( 1, #params.objTable )]
if theTarget.tgtFlag == false then
theTarget.tgtFlag = true
animateTarget(theTarget)
else
scene.targeting(params)
end
end

最佳答案

引用Programming in Lua :

A tail call is a kind of goto dressed as a call. A tail call happens when a function calls another as its last action, so it has nothing else to do.

在您的示例中,animateTarget 显然不是以这种方式调用的,并且可能并且将会遭受堆栈溢出。重写它以利用 TCO 或将其更改为非递归版本。

关于Corona SDK中递归函数中的Lua堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19975002/

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