2016-12-02 6 views
2

私は関数がパラメータで渡された変数を設定することができますどのように聞いてここにいる:どのように変数を関数に渡し、関数内の元の変数を変更できますか?

y = 4 
test(y) 

function test(x) 
    x = 3 
end 

は、事前にありがとうございます。

+0

なぜこのように必要なのか不思議です。 –

+0

あなたは単にLuaとは別の考え方に入る必要があります.Luaだけではなく、それぞれの言語は、共通の考え方を共有しています。 Luaの方法は、関数が複数の値を返すことを可能にすることです。これは、変更された値を返し、必要な変数に(関数の外から)再割り当てすることによって、パラメータを更新するために使用できます。私の見解では、これは「クリーン」なやり方です。あなたが記述する方法(多くの言語で許可されています)は暗黙的な変数の変更を期待できないという意味で実際は少し危険です。 – tonypdmtr

+0

言語と機能の設計についての哲学的な点に加えて、技術的にはあなたの前提は正しくありません。変数を渡すのではなく、式から派生した値を渡しています。あなたの表情はちょうど非常にシンプルな 'y'です。そして、関数yの中では、パラメータyは異なるローカル変数です。パラメタの値を変更することに関する哲学的議論や、それに関する「変数」があります。 –

答えて

0

私の現在のLuaの知識から、これは純粋にLuaでは可能ではありません。これを達成するには、http://metalua.luaforge.net/にダイビングする必要があります。たぶん私は間違っていますが、あなたがそれを提供しなければ私の知識から純粋なルアでは不可能な変数名を取得せずに方法を見ていません。

私は最善の解決策をお勧めすることはできませんなぜ私は知らないが、あなたは、単に代わりに値を返すことができるように私は、あなたが実際にこれを必要とする理由などに興味があります:

function test() 
    return 5 
end 

x = 0 
print(x) -- prints 0 
x = test() 
print(x) -- prints 5 

あなたも落ち着くことができた場合変数を文字列として渡すことで、次のようなこともできます。

function test(y) 
    _G[y] = 5 
end 

x = 0 
print(x) -- prints 0 
test("x") 
print(x) -- prints 5 
+0

ありがとう、それが可能であるかどうかだけ知るために、今日はほとんどの言語はそれを可能にし、私はそれが可能かどうか尋ねていました:) –

+0

@MatteoGuglielmettiおそらく 'debug'を使って元の変数名を得ることができますが、 。 Luaは非常に単純な言語ですが、いくつかの主要言語がすることを期待していません;) –

+0

@MatteoGuglielmetti http://stackoverflow.com/a/1416843/5557841 - 可能ですが、お勧めしません。 –

関連する問題