lua中table对象的引用传递问题
作者:互联网
lua中table对象的引用传递问题
【前言】
废话不多说,直接看代码:
local tab1 = {1}
local tab2 = {3,4}
function func(tab)
for k, v in pairs(tab) do
print(k,v)
end
end
function func1(tab)
table.insert(tab,4)
end
tab2 = tab1
--操作tab2,打印tab1,引用传递tab2 = tab1,作用结果一致,tab2多个nil暂时没搞懂,欢迎讨论
tab2[2] = 2
print(func(tab1),func(tab2))-->tab1 = {1,2},tab2 = {1,2,nil}
table.insert(tab2,3)
print(func(tab1))-->tab1 = {1,2,3}
--传递tab1,打印tab1,引用传递作用的对象还是原来的tab1
func1(tab1)
print(func(tab1))-->tab1 = {1,2,3,4}
lua中的表的值传递是引用传递,如上tab2 = tab1、还有func1(tab)这样直接对表引用操作也会同步到原来的表。
【table引用问题总结】
引用就是一个对象的别名,不会开辟新的内存空间,用内存是同一块…
对于一个变量的引用进行操作,作用效果会直接反映到这个变量上。脚本语言的集合类型一定要注意引用传递问题。
如果不想操作原来的表,那就不能使用table引用,需要将原来引用的内存拷贝一份出来,开辟一块新的内存,然后在拷贝的内存上进行操作,才会不会影响到最初的表。
这里拷贝方法网上很多,我懒得写了,贴一个别人写的不错的帖子:https://blog.csdn.net/Knight_Assassin/article/details/76260227——Lua编程中遇到的table类型传递引用问题
标签:--,tab2,tab1,传递,lua,引用,table 来源: https://blog.csdn.net/qq_42541751/article/details/123226563