2015-01-19 7 views
1

저는 루아를 매우 신중하게 사용하고 있습니다. 프로그램을 시작할 때 테이블을 전역으로 초기화하려고합니다. 맨 위에는 다음이 있습니다.전역 테이블 초기화 및 사용

storage = {} 

그런 다음이 테이블의 요소를 같은 파일의 함수 내에서 반복하고 싶습니다. 하나의 예는 다음과 같습니다이 경우

local output 
for item in storage do 
    output = output .. item 
end 
return output 

, 내가 얻을 :

attempt to call a nil value 

for로 시작하는 줄에.

나는 또한 storage[1]을 인쇄 해 보았습니다. 이 경우 얻을 수 있습니다 :

attempt to index local 'storage' (a nil value) 

누군가가 여기에 무엇이 잘못 될 수 있는지 간단히 설명해 주시겠습니까?

+0

'storage' 변수를 사용하려고하는 코드와 동일한 파일에 초기화하고 있습니까? 그렇지 않다면 모듈 경계를 치고 있습니까? 루아를 사용하고있는 환경은 무엇입니까? –

+1

for-loop 구문을 살펴볼 수 있습니다. 호출 가능, 컨텍스트 및 시작 키의 세 가지 값이 필요합니다. 'pairs'는 같은 것을 반환합니다 ... – Deduplicator

+0

같은 파일에서 초기화되었습니다. 그것은 사용자 정의 프레임 워크 내에 있지만 구조체를 정확하게 복사했습니다. 나는 그것을 for 3-loop로 바 꾸었고,'로컬 'storage (길이가없는 값)의 길이를 얻으려고 시도한다.' – James

답변

1

전체 스크립트가 표시되지 않지만 storage 값이 for item in storage do에서 초기화되고 사용되는 사이에 재설정되는 것은 확실합니다. 값을 유지하면 다른 오류가 발생하기 때문입니다 : attempt to call a table value. for key, item in pairs(storage) do을 - -

당신은 루프에 ipairs 또는 pairs 기능을 사용할 필요가 있지만 먼저 storage의 값을 다시 설정대로 수정해야합니다.