微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐