在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
先上一段代码: local tbl = { ["a"] = 1, ["b"] = 2 } local cpy = tbl for k, v in pairs( tbl ) do print( "tab: " .. k .. ":".. v ) -- 打印tbl里的元素值 end for k, v in pairs( cpy ) do print( "cpy: " .. k .. ":".. v ) -- 打印cpy里的元素值 end 打印结果为: tab: a:1 tab: b:2 cpy: a:1 cpy: b:2 cpy获得了tbl中的所有元素,这个没有问题...(小白:没有问题你说毛线...) local tbl = { ["a"] = 1, ["b"] = 2 } local cpy = tbl for k, v in pairs( cpy ) do cpy[k] = k -- 将元素重新赋值 end for k, v in pairs( cpy ) do print( "cpy: " .. k .. ":".. v ) -- 打印cpy里的元素值 end for k, v in pairs( tbl ) do print( "tab: " .. k .. ":".. v ) -- 打印tbl里的元素值 end 输出: cpy: a:a cpy: b:b tab: a:a tab: b:b (小白:tbl输出为什么是这样的???) (小白:我不想让tbl跟着改变,呜呜呜~~~) 大家别理上面这货。。。有什么方法能让copy过来的tbl各自独立呢,这就是本章要讲的深度拷贝方法clone。 激动人心的时刻就要到来,大家准备好了吗...(小白:准备你妹,赶紧的~~~) --[[ -- 深度克隆一个值 -- example: -- 1. t2是t1应用,修改t2时,t1会跟着改变 local t1 = { a = 1, b = 2, } local t2 = t1 t2.b = 3 -- t1 = { a = 1, b = 3, } == t1.b跟着改变 -- 2. clone() 返回t1副本,修改t2,t1不会跟踪改变 local t1 = { a = 1, b = 2 } local t2 = clone( t1 ) t2.b = 3 -- t1 = { a = 1, b = 3, } == t1.b不跟着改变 -- @param object 要克隆的值 -- @return objectCopy 返回值的副本 --]] function clone( object ) local lookup_table = {} local function copyObj( object ) if type( object ) ~= "table" then return object elseif lookup_table[object] then return lookup_table[object] end local new_table = {} lookup_table[object] = new_table for key, value in pairs( object ) do new_table[copyObj( key )] = copyObj( value ) end return setmetatable( new_table, getmetatable( object ) ) end return copyObj( object ) end local tbl = { ["a"] = 1, ["b"] = 2 } local cpy = clone(tbl) -- 使用克隆方法 for k, v in pairs( cpy ) do cpy[k] = k -- 将元素重新赋值 end for k, v in pairs( cpy ) do print( "cpy: " .. k .. ":".. v ) -- 打印cpy里的元素值 end for k, v in pairs( tbl ) do print( "tab: " .. k .. ":".. v ) -- 打印tbl里的元素值 end 输出: cpy: a:a cpy: b:b tab: a:1 -- tbl元素值没有改变 tab: b:2 -- tbl元素值没有改变 大家可以看到,tbl的元素值没有跟着改变。(小白:...) 本章到此结束,希望对大家有帮助~ 星月倾心贡献~~^_^~!
作者使用 cocos2d-x 3.0 + lua学习和工作心得,未经作者允许,请勿转载!在此谢谢各位手下留情~~~ 本文没有获得作者本人同意,不得转载,否则必追究相关责任。转载请注明出处!!~~ 原文地址:http://www.cnblogs.com/wodehao0808/p/4015699.html |
请发表评论