2012-03-19 102 views
0

我想修改一个可变参数函数内的数组的集合。尝试添加到阵列时,我最终会在副本上工作,并在通话后迷路。有没有什么方法可以通过Lua中的ref传递值?lua修改函数内部的数组

function myfunc(...) 
local args = {...} 
--do work on args-- 
end 

“做功”实际上并没有做任何事情,只是它在功能之外工作得很好。

很显然,我可以传递一个数组的数组,而不是用......但是这有点儿违背了使用的目的...

回答

2

在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 
0

在一个varible使用......被分组整个参数列表的目的。这与参数的按参考性质或按价值性质无关。

Lua中的所有自然类型都是按值传递的,表是唯一的例外。

做你想做的事情最简单的方法就是传递一个数组数组。如果这两个多余的字符看起来太多打字,知道你可以删除括号来代替:

foo({a,b,c}) 
foo{a,b,c} -- equivalent 
+1

'用表是唯一exception.'从技术上讲,一个表的值* *是它的参考。表格的*内容*与表格的值是分开的。 – 2012-03-19 22:17:42