1

ActionScriptのArrayクラスとVectorクラスには、どちらもslice()メソッドがあります。パラメータを渡さない場合、新しい配列またはベクトルは元のベクトルの複製(浅いクローン)になります。

「浅いクローン」とはどういう意味ですか?具体的には、の違いは何ですか

Array newArray = oldArray.slice();
Vector.<Foo> newVector = oldVector.slice();

Array newArray = oldArray;
Vector.<Foo> newVector = oldVector;

?また、Vectorの基本型がFooではなく、intのような単純で不変なものである場合はどうなりますか?

アップデート:

次の結果はどうなりますか?

var one:Vector.<String> = new Vector.<String>()

one.push("something");
one.push("something else");

var two:Vector.<String> = one.slice();

one.push("and another thing");

two.push("and the last thing");

trace(one); // something, something else, and another thing
trace(two); // something, something else, and the last thing

ありがとう!♥</p>

4

1 に答える 1

1

あなたのコンテキストで.slice()は、ベクトルのコピーを作成するだけなので、それnewArrayは とは異なるオブジェクトを参照しますがoldArray、両方とも同一のオブジェクトのように見えます。newVectorとについても同様oldVectorです。

2 番目のスニペット:

Array newArray = oldArray;
Vector.<Foo> newVector = oldVector;

を実際にnewArray参照ますoldArray。つまり、両方の変数が同じ配列を参照しています。newVectorandも同じoldVector— どちらも同じベクトルを参照することになります。ゴム印を使用して、同じ印鑑を別の紙に 2 回押すと考えてください。2 枚の紙に同じ印鑑が示されているだけです。

ちなみに、浅いコピーという用語は、浅いコピーがオブジェクトのみのコピーであるのに対し、深いコピーはオブジェクトとそのすべてのプロパティのコピーであるという点で、深いコピーとは異なります。

また、Vector の基本型が Foo ではなく、int のような単純で不変なものである場合はどうなるでしょうか。

変数はVectorオブジェクトではなくオブジェクトを参照するため、同じintです。

次の結果は何ですか?

あなたの出力は正しいです:

何か、何か、そして別のもの
何か、他の何か、そして最後のもの

two = one.slice()は、引数なしでone、現在のすべての内容で の新しいコピーを作成し、それを に割り当てtwoます。one3 番目の各項目をおよびにプッシュするとtwo、個別のVectorオブジェクトに追加されます。

于 2011-02-23T16:20:49.313 に答える