2017-07-13 11 views
1

私は実際にこの質問について長い間疑問に思っていました。インターネット上のどこかで何かを読んで、すべてのローカル変数をテーブルに読み込むことを思い出すことができます。 私は、グローバル変数を動的に作成する方法と同様に、基本的にローカル変数を動的に作成する方法があるのだろうと思います。 Luaので あなたは単に言って動的なグローバル変数を作成することができます。Luaは、すべてのローカル変数をテーブルにロードしたり、ローカル変数を動的に作成することは可能ですか?

local my_env = getfenv(1); 
for i = 1, 10 do 
    my_env["OMG_DYNAMIC_GLOBAL_VARIABLE_"..i] = i * i; 
end 

しかし、本質的に同じまたはローカル変数のために同じようなことを行う方法がある場合、私はいつも疑問に思っています。何かのように

for i = 1, 10 do 
    local["OMG_DYNAMIC_LOCAL_VARIABLE_"..i] = i * i; 
end 

私はしようとしているものの擬似コードとなります。 私の質問の2番目の部分として、現在のスコープ内のすべてのローカル変数を反復処理する方法があるのだろうかと思いますか?私は私の質問のいずれかの部分に関して任意の助けをいただければ幸いです

local a = 123; 
local b = 321; 
LocalVars = {(local)}; --the table with the local variables in it. 
for i,v in pairs(LocalVars) do print(i, v); end 

:私は、私が何をしようとしています何のための擬似コードは次のようになりますね。 ありがとう

+1

これは、すべてのローカルをチェックしてテーブルに入れることができるので、debug.getlocalの例を確認してください:https://www.lua.org/pil/23.1.1.htmlしかし、これを使って問題を解決するのではなく、これはデバッグ用です目的(パフォーマンスの問題) –

+2

本当に解決しようとしている問題は何ですか?ローカル変数を動的に作成できる場合は、どのようにこの機能を使用しますか? – lhf

答えて

2

テーブル

その内のローカル変数とローカル変数とはテーブルがありません。ローカル変数はコンパイルされたLuaには存在しません。 Luaスタック上には単に位置があります。コンパイル処理中にローカル変数の名前さえ失われます。

ローカル変数は、常にLuaソースコードの静的構造です。テーブル内に存在することはありません。静的でない構文が必要な場合は、表を使用してください。それがテーブルのためのものです。それはなぜLuaグローバルがテーブルに入っているのかの一部です。

0

構文的な砂糖を除いて、あなたが通常のローカルテーブルで提案したものの利点はありません。

local locals = {} 
locals.a = 123 
locals.b = 321 
for i,v in pairs(locals) do 
    print(i, v) 
end 

あなたが提案した構文がどのような方法で読みプログラムが明確か、簡単にすることはありません。実際、それは新しい問題を生み出します。 cも同様に印刷されますか、それともネストされたローカルスコープにあるためではありませんか?

for i,v in pairs(LocalVars) do 
    local c = 1729 
    print(i, v) 
end 
関連する問題