搜索
查看: 1434|回复: 7

使用table.push(数组,自定义数据类型),数组中的自定义数据类型值为何都是一样的?

[复制链接]

2

主题

10

帖子

100

积分

一级会员

Rank: 2

积分
100
发表于 2017-12-4 09:17:38 | 显示全部楼层 |阅读模式


  1. import table;

  2. var Allinfo = {};

  3. class Yinfo{//这里定义
  4.         str name;
  5.         str id;
  6. }
  7. var a = Yinfo();

  8. for(i=1;5;1){
  9.         a.name = "name"        + tostring(i);
  10.         a.id =  tostring(i)
  11.         table.push(Allinfo,a)//把a值逐个写到Allinfo中
  12. }
  13. io.open();
  14. for(i=1;#Allinfo;1){
  15.         io.print(Allinfo[ i ].name,"-",Allinfo[ i ].id)//<font color="red">输出的结果都是一样的,都是最后一个压到数组里的a值。</font>
  16. }

  17. io.getText();

复制代码
代码如上,发现这样压入数组中的自定义数据类型值全是一样的,是不是类不是这样操作的?
回复

使用道具 举报

2

主题

57

帖子

1433

积分

新手入门

积分
1433
发表于 2017-12-4 09:31:13 | 显示全部楼层
  1. import table;//核心库,不需要import

  2. var Allinfo = {};

  3. class Yinfo { //这里定义
  4.     str name;
  5.     str id;
  6. }

  7. for(i = 1; 5; 1) {
  8.     var a = Yinfo();//类对象创建的实例是一个table,是 传址的,需要在循环内创建,否则指向的都是同一个对象
  9.     a.name = "name" + tostring(i);
  10.     a.id =  tostring(i);
  11.     table.push(Allinfo, a) //把a值逐个写到Allinfo中
  12. }
  13. io.open();
  14. for(i = 1; #Allinfo;1){
  15.     io.print(Allinfo[ i ].name, "-", Allinfo[ i ].id) //<font color="red">输出的结果都是一样的,都是最后一个压到数组里的a值。</font>
  16. }

  17. execute("pause")
复制代码
回复

使用道具 举报

12

主题

679

帖子

4008

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
4008
发表于 2017-12-4 09:34:17 | 显示全部楼层
//var a = Yinfo();
for(i=1;5;1){
   
var a = Yinfo();
    a.name =
"name"        + tostring(i);
    a.id =  
tostring(i)
    table.push(Allinfo,a)
//把a值逐个写到Allinfo中
}



回复

使用道具 举报

39

主题

174

帖子

1027

积分

荣誉会员

htmlayout.cn 我的学习笔记

Rank: 8Rank: 8

积分
1027
发表于 2017-12-4 09:36:25 | 显示全部楼层
  1. for(i=1;5;1){
  2.         a.name = "name"        + tostring(i);
  3.         a.id =  tostring(i)
  4.         console.dump(a)
  5.         //第一种写法
  6.         //Allinfo[ i ] = table.clone(a);
  7.         //第二种写法
  8.         table.push(Allinfo,table.clone(a));

  9. }
复制代码
! www.HtmLayout.Cn 我的学习笔记
回复

使用道具 举报

5

主题

17

帖子

239

积分

二级会员

Rank: 3Rank: 3

积分
239
发表于 2017-12-4 10:03:58 | 显示全部楼层
Yinfo 需要在for里面创建,不然,都是引用,肯定是最后一个的值。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-12-4 11:57:57 | 显示全部楼层
你的代码里只创建了一个Yinfo对象,
var a = Yinfo();

这句代码只执行了一次。
当然只有一个Yinfo对象,你创建过第二个Yinfo对象吗?!没有!
他自己跟自己,当然是一样的。

修改对象的属性,不等于创建一个新的对象
回复

使用道具 举报

2

主题

10

帖子

100

积分

一级会员

Rank: 2

积分
100
 楼主| 发表于 2017-12-4 13:21:00 | 显示全部楼层
感谢xauto、popdes、djy252、Jacen.He 感谢
回复

使用道具 举报

0

主题

6

帖子

42

积分

新手入门

Rank: 1

积分
42
发表于 2018-6-21 12:10:41 | 显示全部楼层
看明白了,类 Yinfo() 虽然有个括号,但依然只是单个对象,不是一个集合。
不过,当重新定义了 var a = Yinfo() 之后,a 也是一个类了,但却可以不用带()引用。类似于语句:
var a = New Yinfo
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-19 15:56 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表