Project1
标题:
数组代入问题
[打印本页]
作者:
SeRiKa
时间:
2009-7-1 22:14
提示:
作者被禁止或删除 内容自动屏蔽
作者:
紫苏
时间:
2009-7-1 22:28
因为 $b[0] = $a 和 $b[1] = $a 这两句都是引用的拷贝,它们让变量指向 $a 在内存中的地址,所以当你调用 $e.e 修改了 $a 之后,会同时反映给 $b[0] 和 $b[1]~
要避免这个现象,可以利用对象的克隆:
http://szsu.spaces.live.com/blog/cns!D57D0E50BE1820CF!170.entry
(原帖数据丢失了,这是备份)
作者:
SeRiKa
时间:
2009-7-1 22:34
提示:
作者被禁止或删除 内容自动屏蔽
作者:
紫苏
时间:
2009-7-1 22:52
前者是修改了 $a 指向的对象本身(把 $a 的第一个和第二个元素都改变了),$a 本身还是指向这个对象的,而 $b[0] 和 $b[1] 又指向 $a,所以这两个又都指向该对象,自始至终这三者指向的内存地址值没有改变过。
后者则是让 $a 指向的对象改变了——第一次调用 $e.e 时指向的是 [1, 1] 这个对象,接着又让 $b[0] 指向了 [1, 1];然后第二次调用 $e.e 后,$a 指向了 [2, 2],这就是另外一个对象了,之后 $b[1] 和指向的就是 [2, 2]
作者:
SeRiKa
时间:
2009-7-1 23:15
提示:
作者被禁止或删除 内容自动屏蔽
作者:
紫苏
时间:
2009-7-1 23:51
$e = E.new
$z = 1
$e.e
$b[0] = $a.clone
$z = 2
$e.e
$b[1] = $a.clone
p $b[0] # <= [[1,1],[1,1]]
p $b[1] # <= [[2,2],[2,2]]
复制代码
你要的是这个效果吧
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1