我想修改一個可變參數函數內的數組的集合。嘗試添加到陣列時,我最終會在副本上工作,並在通話後迷路。有沒有什麼方法可以通過Lua中的ref傳遞值?lua修改函數內部的數組
function myfunc(...)
local args = {...}
--do work on args--
end
「做功」實際上並沒有做任何事情,只是它在功能之外工作得很好。
很顯然,我可以傳遞一個數組的數組,而不是用......但是這有點兒違背了使用的目的...
我想修改一個可變參數函數內的數組的集合。嘗試添加到陣列時,我最終會在副本上工作,並在通話後迷路。有沒有什麼方法可以通過Lua中的ref傳遞值?lua修改函數內部的數組
function myfunc(...)
local args = {...}
--do work on args--
end
「做功」實際上並沒有做任何事情,只是它在功能之外工作得很好。
很顯然,我可以傳遞一個數組的數組,而不是用......但是這有點兒違背了使用的目的...
在Lua中,你不能只選擇參照或不傳遞變量。基本類型永遠不會被引用傳遞(如數字和布爾值),其他類型總是通過引用傳遞(如表,用戶數據和字符串)。在字符串的情況下,這並不重要,因爲它們無論如何都是不可變的。
因此,無論你通過你的論點,你要爲這樣的字符串全局工作:
a=2
b=3
function myfunc(...)
local args={...}
for k,v in pairs(args) do
_G[v]=_G[v]+k
end
end
myfunc('a')
print(a) -- 3
myfunc('a','b')
print(a,b) -- 4 5
注意,在全局這隻作品,因爲當地人不保留在表中。
使用表讓這樣的事情痛苦少:
function myfunc(t)
for k,v in pairs(t) do
t[k]=v+k
end
end
tab1={a=2}
myfunc(tab1)
print(tab1.a) -- 3
tab2={a=2,b=3}
myfunc(tab2)
print(tab2.a,tab2.b) -- 3 5
在一個varible使用......被分組整個參數列表的目的。這與參數的按參考性質或按價值性質無關。
Lua中的所有自然類型都是按值傳遞的,表是唯一的例外。
做你想做的事情最簡單的方法就是傳遞一個數組數組。如果這兩個多餘的字符看起來太多打字,知道你可以刪除括號來代替:
foo({a,b,c})
foo{a,b,c} -- equivalent
'用表是唯一exception.'從技術上講,一個表的值* *是它的參考。表格的*內容*與表格的值是分開的。 – 2012-03-19 22:17:42