Luaの

2012-02-01 9 views
3

内のローカル変数を作成し、私は別の変数(この例ではvarnameという)に格納された変数名(例えば、「X」)を持っている場合、私はこれは複雑な方法であるLuaの

_G[varname]=42 

を介してグローバル変数を作成することができますつまり、

x=42 

ローカル変数についても同じことをしたいと思います。出来ますか?

答えて

3

ローカル変数を変更するのに実際に文字列を使用する必要がある場合は、ローカルテーブルを使用することをお勧めします。

local localVars = {} 

function setValue(varname, value) 
    localVars[varname] = value 
end 

function getValue(varname) 
    return localVars[varname] 
end 

このようにローカル変数を実際に作成したり破棄したりすることはありませんが、かなり近づいています。

+0

ローカル変数_per function_が必要な場合は、各関数に独自の 'local localVars = {}'を与える必要があります。現在の方法では、ローカル変数はすべての関数で共有され、関数呼び出しの間に存続します。また、今のように、 'localVars ['a']'を使用する関数を呼び出し、その関数が 'localVars ['a']'を使用する関数を呼び出すと、2番目の関数は最初の値を壊します。 –

+0

絶対に!まあまあ。 – kikito

11

いいえ。ローカル変数はテーブルに保存されていないか、名前を関連付けた構造体に格納されていないためです。 luaコードがバイトコードにコンパイルされると、ローカル変数名はluaスタックの数値オフセットに変換されます。