推荐阅读: 先来说说·,为什么突然谈及到浅拷贝和深拷贝这个问题。因为时间紧任务重,lua零基础参与项目研发,没有系统学过lua,对于lua里面的坑,差不多该踩的,能踩的,我踩了,或者即将去踩了。这不,本来周五准时下班,然后愉快的度过一个双休。梦想总是美好的,现实就是,它来了(坑),由于系统模块比较大,牵扯到的数据比较多,开发的时候也没太注重数据的统一,数据出现了,只能大海捞针去找问题。 对于拷贝这个问题,lua和其他很多语言一样,分为浅拷贝和深拷贝。 在lua中,使用“=”进行浅拷贝,根据拷贝对象的不同,又分为两种情况: 1.拷贝对象为string、number、boolean等基础类型时,拷贝的过程是进行复制粘贴。创建一个新的对象,拷贝出来的新对象和原来的对象互不影响,互不干涉,所以修改拷贝出来的对象的值不会影响到原来的对象的值! 输出结果: 2.拷贝对象的类型为table,拷贝出来的对象和拷贝前的实际上是同一个对象,占同一个内存,简单点说就是一个人的两个名字。如果改变了拷贝出来对象的值,原对象也会随之改变。 输出结果: 对于2,如果想修改拷贝后的对象的值,使原对象不受影响,那么就要采用深拷贝了。 Lua中没有提供这样的api的,那就自己封装一个函数,递归拷贝table中所有元素以及设置元表即可!如下 使用方法: 输出结果
前言
浅拷贝和深拷贝
浅拷贝
local value_A=10 local value_B=value_A print("A的值:"..value_A) print("B的值:"..value_B) value_B=5 print("A的值:"..value_A) print("B的值:"..value_B)
A的值:10 B的值:10 A的值:10 B的值:5
local tab={} tab["csdn"]="懒人下蛋" tab["抖音"]="shirln" tab["微信公众号"]="懒人下蛋" tab["QQ群"]="704621321" for k,v in pairs(tab) do print(k.."对应的账号:"..v) end local temp=tab temp["csdn"]="爱上游戏开发" temp["微信公众号"]="爱上游戏开发" for k,v in pairs(tab) do print("拷贝前的对象:"..k.."对应的账号:"..v) end for k,v in pairs(temp) do print("拷贝后的对象:"..k.."对应的账号:"..v) end
csdn对应的账号:懒人下蛋 QQ群对应的账号:704621321 微信公众号对应的账号:懒人下蛋 抖音对应的账号:shirln 拷贝前的对象:csdn对应的账号:爱上游戏开发 拷贝前的对象:QQ群对应的账号:704621321 拷贝前的对象:微信公众号对应的账号:爱上游戏开发 拷贝前的对象:抖音对应的账号:shirln 拷贝后的对象:csdn对应的账号:爱上游戏开发 拷贝后的对象:QQ群对应的账号:704621321 拷贝后的对象:微信公众号对应的账号:爱上游戏开发 拷贝后的对象:抖音对应的账号:shirln
深拷贝
function clone(master) local temp = {} for k, v in pairs(master) do if type(v) == "table" then temp[k] = clone(v) else temp[k] = v end end return temp end
local tab={} tab["csdn"]="爱上游戏开发" tab["抖音"]="shirln" tab["微信公众号"]="爱上游戏开发" tab["QQ群"]="704621321" local temp=clone(tab) prring(temp)
704621321 shirln 爱上游戏开发 爱上游戏开发
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算