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类型传递引用问题

猜你喜欢

转载自blog.csdn.net/qq_42541751/article/details/123226563