孫までディープコピー

あるObjectとArrayとVectorを孫までディープコピーする必要があったのでてすてす。

Object

var t : Object = { a : { b : "c" }};
var u : Object = ObjectUtil.copy(t);
t["a"]["b"] = "d";
trace(t["a"]["b"]);
trace(u["a"]["b"]);

d
c

はいおっけー

Array

var v : Array = [ { b : "c" } ];
var w : Array = v.concat();
v[0]["b"] = "d";
trace(v[0]["b"]);
trace(w[0]["b"]);

d
d

アッー!ちょっと考える。

var v : Array = [ { b : "c" } ];
var w : Array = ArrayUtil.toArray(ObjectUtil.copy(v));
v[0]["b"] = "d";
trace(v[0]["b"]);
trace(w[0]["b"]);

d
c

いえーい。ってこれVectorに使えるのか?VectorUtilなんてないので適当に

Vector

var x : Vector.<Object> = Vector.<Object>([ { b : "c" } ]);
var y : Vector.<Object> = Vector.<Object>(ObjectUtil.copy(x));
x[0]["b"] = "d";
trace(x[0]["b"]);
trace(y[0]["b"]);

d
c

あやしー

おまけ

一応・・

var t : Object = { z : {a : { b : "c" }}};
var u : Object = ObjectUtil.copy(t);
t["z"]["a"]["b"] = "d";
trace(t["z"]["a"]["b"]);
trace(u["z"]["a"]["b"]);

d
c

ですよねー