魔兽地图编辑器吧 关注:65,057贴子:3,836,622
  • 8回复贴,共1

有没有lua大佬帮忙看下这个复制表的函数。

只看楼主收藏回复

function hs( bg )
local a = {}
local function b(bg)
if type(bg) ~= "table" then
return bg
end
local c = {}
a[bg] = c
for i,v in pairs(bg) do
c[b(i)] = b(v)
end
return setmetatable(c, getmetatable(bg))
end
return b(bg)
end
百度到的,不知道 local a = {} a[bg] = c 存在的意义


IP属地:福建1楼2018-01-05 22:31回复
    求大佬帮忙解答一下
    另外692125060 这个QQ群,加群答案是WE
    希望来几个大佬,帮我这样的菜鸡解答些小问题
    不然自己找答案费劲,1个问题的报酬是10元红包


    IP属地:福建4楼2018-01-05 22:40
    回复
      感觉像作用域 防止栈释放


      IP属地:湖北来自Android客户端5楼2018-01-05 23:27
      收起回复
        如果传人的参数不是一个表类型,那么就返回这个参数,也就是返回string或者integer,通过这里也可以看出来a[bg],那么问题来了,一个string或者integer,如果不处理的话,那么他为什么需要去遍历它,用for,是我看少了什么么,我也是新手


        IP属地:湖北来自Android客户端6楼2018-01-06 00:50
        收起回复
          大概明白了,也起床测试了,印证了,我理解的。
          if type(bg) ~= "table" then
          return bg
          elseif a[bg] then
          return a[bg]
          end
          我百度到的,阉割了 elseif a[bg] then return a[bg] end 这段
          这样就相当于a这个表是多余的。
          而完整的函数,这个a表是用来,防止表套自己的表复制时,会死循环。
          还有当有两个元素都为相同1个表时,用这个a表也能完美复制,而不出现复制后,相同的表变成2个。
          t1={}
          t2={x1=t1,x2=t1} --←完美复刻相同的表
          t2.x3=t2 --←不处理好会出现死循环的情况
          t3=hs(t2)
          print(t2.x1,t2.x2)
          print(t3.x1,t3.x2)
          就是阉割版的,我都觉得函数作者牛B,看了完整版了,觉得这个作者超牛B,代码写得美。
          这个函数是全部复制的,感觉类似于魔兽单位组这样的结构,用这个函数去复制不好。
          因为这个复制是把元素也变了 0 0 但一般数据预写类的表,用这样的函数复制省心。
          这个作者666666,另外感谢群里大佬给的链接,也666666


          IP属地:福建7楼2018-01-06 05:52
          回复
            …喵呜嚼梨


            IP属地:广东来自Android客户端8楼2018-01-06 17:46
            收起回复