我想修改一个可变参数函数内的数组的集合。尝试添加到阵列时,我最终会在副本上工作,并在通话后迷路。有没有什么方法可以通过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