ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

lua中table对象的引用传递问题

2022-03-02 12:33:29  阅读:137  来源: 互联网

标签:-- tab2 tab1 传递 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有