2017-12-23 7 views
1

現在LUAの一部の変数をエクスポートして再インポートしようとしています。 テーブルAllGlobalsを想像してみてください。テーブルにはスクリプトで使用されるすべてのグローバル変数が含まれ、keyには変数名が含まれ、value - surpriseには変数値が含まれます。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、パッケージ、_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 
関連する問題