
my @original = 1,3,7;my @clone = @original.clone;@original[*-1] = 'Dog';say "original is finally <@original[]> ({@original.^name})";say "clone is finally <@clone[]> ({@clone.^name})"; 输出显示它们不会相互影响:
original is finally <1 3 Dog> (Array) clone is finally <1 3 7> (Array)
但是,如果我将数组放入标量变量中,则克隆不会将两者分开.改变一个会改变另一个:
my $original = [ 1,7 ];say "original is <$original[]> ({$original.^name}) with {$original.elems} values";my $clone = $original.clone;say "clone is <$clone[]> ({$clone.^name}) with {$clone.elems} values";if $original eqv $clone { say "The original and clone have the same values!"; }if $original === $clone { say "The original and clone are the same object!"; }if $original =:= $clone { say "The original and clone are the same container!"; }$original[*-1] = 'Dog';say "original is finally <$original[]> ({$original.^name}) with {$original.elems} values";say "clone is finally <$clone[]> ({$clone.^name}) with {$clone.elems} values"; 输出显示原始和克隆仍然链接,但奇怪的是它们不是同一个对象或容器:
original is <1 3 7> (Array) with 3 values clone is <1 3 7> (Array) with 3 values The original and clone have the same values! original is finally <1 3 Dog> (Array) with 3 values clone is finally <1 3 Dog> (Array) with 3 values
这个工作,克隆被分配给一个数组变量:
my $original = [ 1,7 ];my @clone = $original.clone;$original[*-1] = 'Dog';say "original is finally <$original[]> ({$original.^name})";say "clone is finally <@clone[]> ({@clone.^name})"; 但是当原始数组是一个数组并且克隆被分配给标量变量时,它不起作用:
my @original = 1,7;my $clone = @original.clone;@original[*-1] = 'Dog';say "original is finally <@original[]> ({@original.^name})";say "clone is finally <$clone[]> ({$clone.^name})"; 这是Rakudo 2017.01.
解决方法 在Rakudo 2017.04,这不再是一个问题.我得到了预期的输出:original is <1 3 7> (Array) with 3 valuesclone is <1 3 7> (Array) with 3 valuesThe original and clone have the same values!original is finally <1 3 Dog> (Array) with 3 valuesclone is finally <1 3 7> (Array) with 3 values总结
以上是内存溢出为你收集整理的何时Perl 6阵列克隆不是克隆?全部内容,希望文章能够帮你解决何时Perl 6阵列克隆不是克隆?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)