2017-12-23 1 views
1

현재 LUA에서 일부 변수를 내보내고 다시 가져 오려고합니다. 테이블 AllGlobals을 상상해보십시오. 이 테이블에는 스크립트에 사용 된 모든 전역 변수가 들어 있으며 key에는 변수 이름이 포함되고 value - 놀람 - 변수 값을 포함합니다.Lua : 테이블을 통한 변수 지정

지금 내 스크립트에서해야 할 일은 변수를 재 할당하는 것입니다.

1 function InsertGlobals() 
2  for key,value in pairs(AllGlobals) do 
3   key = value 
4  end 
5 end 

을 잘 : 나는 분명히 작동하지 않는 다음과 같은 솔루션에 대해 생각하기 시작 사람이 키에 포함 된 변수 이름에 3 행의 값을 할당하기위한 해결책을 알고 있나요 변수에 삽입하지 열쇠 자체? 내 자신의 문제에

답변

1

솔루션 : 당신은 얕은 반복을하고

function InsertGlobals() 
    for key,value in pairs(AllGlobals) do 
     _G[key]=value 
    end 
end 
0

- 당신은 테이블에있는 테이블에 걸쳐 횡단하지 않습니다. 예를 들어, 테이블 입력은 _G.examp.newfunc()와 같이 _G에 examp.newfunc()와 같은 것을 넣지 않습니다. 또한 _G, package 및 _ENV의 참조를 복제하는 것이 현명하지 않은 경우, 즉 용도가 있음을 의미하지 않는 한 현명한 방법이 아닙니다.

function InsertGlobals(input) 
    for key, value in pairs(input) do 
     if(key ~= "_G" or key ~= "package" or key ~= "_ENV")then 
      _G[key] = value 
     end 
    end 
end 

얕은 반복을 수정하려면 약간의 재귀 만 수행하면됩니다. 스택을 날려 버리지 않을 것이라고 확신하지만, _G, 패키지 및 _ENV를 남겨두면 분명히 알 수 있습니다.

function InsertGlobals(input) 
    for key, value in pairs(input) do 
     if(key ~= "_G" or key ~= "package" or key ~= "_ENV")then 
      if(type(value) ~= "table")then 
       _G[key] = value 
      else 
       InsertGlobals(value) 
      end 
     end 
    end 
end 
관련 문제