lua 的 “传值” 与 “传引用”(亦称 “传址”)
在lua中除了table是引用传递外,其余基本都是值传递。所以当你直接打印一个table的时候,看到的是一个指针类型的数据。
一方面,不能通过简单的 “ = ”来copy一个表,因为这样传过去的还是它自身的引用(地址),必须通过额外写一个方法来实现table的复制;
另一方面,通过函数return返回的table类型数据,也是返回的引用,如果希望通过只读的方式拿到数据,则应在拿到后进行一下copy的操作,然后再对副本进行修改;
而对于除table外的其它常见数据类型,则基本都是传值的方式,下面以函数为例:
function fun_1()
print("第一个函数")
end
function fun_2()
print("第二个函数")
end
x = fun_1
y = x
x = fun_2
y()
x()
输出:第一个函数 -- 修改x对y没有产生影响,可见是 “值传递” 的方式。
第二个函数
下面举一个实现copy table的例子:
function cloneTable(tab) -- 克隆一份table
local function copy(target, res)
for k,v in pairs(target) do
if type(v) ~= "table" then
res[k] = v;
else
res[k] = {};
copy(v, res[k]) -- 递归
end
end
end
local result = {}
copy(tab, result)
return result
end
相关推荐
峰哥 2020-09-23
陈云佳 2020-08-15
wqiaofujiang 2020-07-05
wordmhg 2020-06-26
wqiaofujiang 2020-06-16
zllbirdonland 2020-06-16
eroshn 2020-06-10
长安长夜Saint 2020-06-07
Dawnworld 2020-06-07
fansenjun 2020-03-01
CSDNMrWang 2020-05-11
Dawnworld 2020-05-05
陈云佳 2020-04-21
Neptune 2020-04-20
shunelly 2020-04-16
aolishuai 2020-04-15
YukiRain 2020-04-14
陈云佳 2020-03-07
陈云佳 2020-03-05