2016-12-02 60 views
2

我在這裏問你怎麼能一個功能設置通過參數傳遞的變量:如何將一個變量傳遞給函數並更改函數中的原始變量?

y = 4 
test(y) 

function test(x) 
    x = 3 
end 

預先感謝您。

+0

我很好奇你爲什麼需要這個? –

+0

你只需要用Lua(而不僅僅是Lua)進入不同的思維模式 - 即使某些語言有共同的「想法」,每種語言都有自己的思維模式)。 Lua的方法是允許一個函數返回多個值,而這又可以用來更新任何參數,只需返回修改後的值,並將其從函數外部重新分配給所需的變量。在我看來,這是一種「乾淨」的做事方式。你所描述的方式(許多語言允許的)實際上是有點冒險的,因爲你可能不會期望一個隱含的變量變化。 – tonypdmtr

+0

除了關於語言和函數設計的哲學觀點之外,技術上你的前提是不正確的:你沒有傳遞一個變量,而是傳遞一個從表達式派生的值。你的表情恰好是非常簡單的'y'。然後在函數裏面'y'是一個參數,因此是一個不同的局部變量。關於改變參數或任何「變量」的價值,有更多的哲學論點。 –

回答

0

從我目前對Lua的知識來看,純粹的Lua是不可能的。你必須潛入http://metalua.luaforge.net/才能達到此目的。也許我錯了,但是我沒有看到一種方法,除非你提供它,否則根據我的知識是不可能用純Lua來獲取變量名的。

我很好奇,因爲爲什麼你確實需要這一點,因爲我不知道爲什麼我不能建議最好的解決辦法,但你完全可以返回值,而不是:

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 - 所以有可能,但不推薦。 –