2011-09-23 5 views
1

복잡한 코드에서 나는 이상한 행동을 발견했습니다 : 분명히 루아는 로컬 변수를 C 및 Java와 동일하게 취급하지 않습니다 (나는 놀랍지는 않지만 어쨌든 그것을 처리하는 방법을 모르겠습니다!)이 재귀 호출의 로컬 변수는 어떻게됩니까?

PILLua-users.org을 읽었지만 재귀에서 로컬 변수가 어떻게되는지는 언급하지 않았습니다. 그것은 나에게 다음과 같은 테스트 코드를 개발하는 원인 :

function addN(n) 
    local ret="" 
    if n>0 then 
     ret=ret..addN(n-1) 
     print("for n="..n.." ret='"..ret.."'") 
    else 
     print("n reached 0") 
    end 
    return ret 
end 

print("Final result='"..addN(9).."'") 

예상 결과 :

Final result='987654321' 

하지만 얻을 :

Final result='' 

이유는 무엇입니까? 예상 된 결과에 어떻게 도달 할 수 있습니까?

답변

5

실제로 어디서나 n을 연결하지 않았습니다. 다음과 같이 시도하십시오 :

ret = tostring(n)..addN(n-1) 
+0

이상, 'ret = n..addN (n-1)'. ret는 결국 "..."입니다. – Bahbar

+0

@Bahbar 좋은 콜, 고맙습니다 :-) – cnicutar

관련 문제