天天看点

Aardio - 关于表的指针同步

  • 表成员改变,不影响变量指针。

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

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);
           
Aardio - 关于表的指针同步

继续阅读