加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua的函数参数为table时奇特现象

发布时间:2020-12-14 21:53:36 所属栏目:大数据 来源:网络整理
导读:前言 今天在工作中使用lua编写代码时发生了一个有趣的现象,特此记录一下。 问题再现 当lua的函数为table时会发生什么情况,话不多说直接上代码: local tb = { 1 , 2 , 3 } function testObject ( tab , index ) tab [ 10 ] = 110 tab = { 4 , 5 , 6 } tab

前言

今天在工作中使用lua编写代码时发生了一个有趣的现象,特此记录一下。

问题再现

当lua的函数为table时会发生什么情况,话不多说直接上代码:

local tb = {1,2,3}

function testObject(tab,index)
    tab[10] = 110
    tab = {4,5,6} 
    tab = tab[index]
    return tab
end

print("tb[2] =",testObject(tb,2))

for k,v in pairs(tb) do
    print(k,v)
end

大家来猜一猜输出结果是什么?反正我是理解错了,我把结果粘出来咱们一起看一下吧

tb[2] = 5
1 1
2 2
3 3
10 110

不知道大家看到这个结果有没有不理解的,反正我一开始是没有明白,但是做了几次试验以后渐渐理解了这种行为…

总结

  • 我们都知道lua函数的参数为table时是引用传递,也就是在函数中对参数table的修改会反应到函数的“外部”。
  • 如果我是修改参数table的部分字段的时候也确实这样,比如tab[10] = 110
  • 但是我如果直接给这个table赋值,它就会变成一个局部变量,切断了和“外部”的联系,比如例子中的tab变量。
  • 这仅仅是我个人的理解,如果我理解的有问题或者大家有更加真确的解释,欢迎给我留言指出,我会尽快改正的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读