arrays - What does it mean for .slice() to be a "shallow clone"? -
actionscript's array , vector classes both have slice() method. if don't pass parameters, new array or vector duplicate (shallow clone) of original vector.
what mean "shallow clone"? specifically, difference between
array newarray = oldarray.slice(); vector.<foo> newvector = oldvector.slice();
and
array newarray = oldarray; vector.<foo> newvector = oldvector;
? also, if vector's base type isn't foo, simple , immutable int?
update:
what result of following?
var one:vector.<string> = new vector.<string>() one.push("something"); one.push("something else"); var two:vector.<string> = one.slice(); one.push("and thing"); two.push("and last thing"); trace(one); // something, else, , thing trace(two); // something, else, , last thing
thanks! ♥
in context, .slice()
make copy of vector, newarray
refers different object oldarray
, except both seem identical objects. likewise goes newvector
, oldvector
.
the second snippet:
array newarray = oldarray; vector.<foo> newvector = oldvector;
actually makes newarray
reference oldarray
. means both variables refer same array. same newvector
, oldvector
— both end referring same vector. think of using rubber stamp stamp same seal twice on different pieces of paper: it's same seal, represented on 2 pieces of paper.
on side note, term shallow copy differs deep copy in shallow copy of only object while deep copy of object , properties.
also, if vector's base type isn't foo, simple , immutable int?
it's same, because variables refer vector
objects , not int
s.
what result of following?
your output correct:
something, else, , thing something, else, , last thing
two = one.slice()
, without arguments, makes new copy of one
current contents , assigns two
. when push each third item one
, two
, you're appending distinct vector
objects.
Comments
Post a Comment