2013-11-14 4 views
3

else 문이 너무 많이 실행되면 다음과 같은 이유로 아래 코드에서 스택 오버플로 오류가 발생합니다. 나는 장면을 가져 오려고 노력 중이다. 목표 지정 기능은 objTable에서 대상을 선택하지만 매개 변수로 전달 된 대상은 .tgtFlag == false 만 유효합니다. 함수가 .tgtFlag == true을 가진 대상을 선택하면 동일한 매개 변수 집합을 전달하는 scene.targeting 함수를 호출합니다.코로나 SDK에서 재귀 함수에서 Lua 스택 오버플로

줄 바꿈은 local theTarget = params.objTable[math.random(1, #params.objTable)]이지만, else scene.targeting(params) end 이후에만 여러 번 호출됩니다.

도움을 주시면 감사하겠습니다.

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 

답변

4

Programming in Lua 참조 :

꼬리 전화 통화로 옷을 입고 고토의 일종이다. 꼬리 호출은 함수가 다른 함수를 마지막 함수로 호출 할 때 발생하므로 수행 할 작업이 없습니다.

예제에서 animateTarget은 분명히 그런 식으로 호출되지 않으며 스택 오버플로가 발생할 수 있습니다. TCO를 사용하거나 비 재귀 버전으로 변경하려면 다시 작성하십시오.

+0

꼬리 호출에 대해 알지 못했습니다. 스택을 사용하지 않는 작은 트릭. – joed4no

관련 문제