加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

何时Perl 6阵列克隆不是克隆?

发布时间:2020-12-15 23:33:15 所属栏目:大数据 来源:网络整理
导读:如果我将一个列表放在一个数组变量中并将其克隆到另一个数组变量中,则两者是不同的: my @original = 1,3,7;my @clone = @original.clone;@original[*-1] = 'Dog';say "original is finally @original[] ({@original.^name})";say "clone is finally @clone[
如果我将一个列表放在一个数组变量中并将其克隆到另一个数组变量中,则两者是不同的:

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 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 7> (Array) with 3 values

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读