aardio - 关于表的指针同步

本文详细探讨了Lua中表的成员改变与表本身的改变对变量指针的影响。通过实例展示了当表成员变化时,两个引用同一表的变量会同步更新,而表重新赋值时则会产生新的指针。同时,使用了`table.mix`、直接赋值、拆分再组合以及克隆等操作来说明这些变化。最后,通过示例代码展示了各种情况下的指针变化情况。
摘要由CSDN通过智能技术生成
  • 表成员改变,不影响变量指针。

  • 表本身改变,会改变变量指针。

var a = {1,2,3}
var b = a 

1、b = a  表示两个表用一个地址,指针一样。

2、当改变其中一个表的【成员】的值时,如 a[1] = 5 ,因为改变的是成员值,没有影响表的指针,所以两个表的值都会同步改变。

3、当某一个【表】本身被改变(重新赋值)时,如 a = {4,5,6} (而不是分别给成员赋值 a[1]=4; a[2]=5; a[3]=6;) 则给a表一个新的指针,但不影响b表。

var a = {1,2,3}

var b = a  // 此时两个表内容和指针都一样

b = ..table.mix(a)  // 因为mix()的返回值就是表a,所以本句相当于b=a,此时两个表内容和指针都一样

b = {1,2,3}  // 直接赋值:此时两个表内容一样,指针不一样

b ={..table.unpack(a)}  // 拆分再组合:此时两个表内容一样,指针不一样

b = ..table.clone(a)  // 克隆:此时两个表内容一样,指针不一样

4、两个表,即使初始值内容一样,指针也不一样。

var a = {1,2,3}

var b = {1,2,3}  // 此时两个表内容一样,指针不一样

import console; 

var a = {1,2,3}
var b = a

console.dump(a,b,a=b,'\n\n');

a[1] = 4
a[2] = {4,5,6}
a[3] = "789"
console.dump(a,b,a=b,'\n\n');

// a = null
// a = 4
a = {5,6,7}
console.dump(a,b,a=b);

console.pause(true);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢光庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值