perl6 数组赋值:指针还是副本?
perl6 array assignment: pointer or copy?
在 perl6 中,我想将一个数组分配给另一个数组,并使生成的数组成为不同的实体,但似乎直接分配或克隆都不能满足我的要求。有没有一种方法可以用一个表达式复制数组而不是编写循环例程?
To exit type 'exit' or '^D'
> my @a=<a b c d e>
[a b c d e]
> my @b = <1 2 3 4 5 6 7>
[1 2 3 4 5 6 7]
> my @c = @a
[a b c d e]
> @c[3]
d
> @c[3]=3;
3
> @c
[a b c 3 e]
> @a
[a b c d e]
> @c === @a
False
> @c == @a
True # this is unexpected, @c and @a should be different, right?
> my @x=@a.clone
[a b c d e]
> @x[3]=3
3
> @x
[a b c 3 e]
> @x === @a
False
> @x == @a
True # unexpected, @x and @a should be distinct things, right?
>
非常感谢!!!
lisprog
你很不幸没有与@b 进行比较,这可能会帮助你解决问题:)
==
是数字比较,所以当您要求将列表作为数字进行比较时,它会选择元素的数量作为表示形式。 Perl 5 或 6 中的运算符强制转换所涉及的类型。如果要测试数组的元素是否相同,请尝试 eqv
运算符。
比较数组的长度,所以下面是正确的:
@a == @c == @x == 5
尝试:
my @a = <a b c d e>;
my @b = <1 2 3 4 5>;
@a eqv @b;
您可能想查看有关这些运算符的一些文档。智能匹配 ~~
运算符可能更符合您对 ==
.
的期望
https://docs.perl6.org/routine/$EQUALS_SIGN$EQUALS_SIGN
https://docs.perl6.org/routine/$TILDE$TILDE
在 perl6 中,我想将一个数组分配给另一个数组,并使生成的数组成为不同的实体,但似乎直接分配或克隆都不能满足我的要求。有没有一种方法可以用一个表达式复制数组而不是编写循环例程?
To exit type 'exit' or '^D'
> my @a=<a b c d e>
[a b c d e]
> my @b = <1 2 3 4 5 6 7>
[1 2 3 4 5 6 7]
> my @c = @a
[a b c d e]
> @c[3]
d
> @c[3]=3;
3
> @c
[a b c 3 e]
> @a
[a b c d e]
> @c === @a
False
> @c == @a
True # this is unexpected, @c and @a should be different, right?
> my @x=@a.clone
[a b c d e]
> @x[3]=3
3
> @x
[a b c 3 e]
> @x === @a
False
> @x == @a
True # unexpected, @x and @a should be distinct things, right?
>
非常感谢!!!
lisprog
你很不幸没有与@b 进行比较,这可能会帮助你解决问题:)
==
是数字比较,所以当您要求将列表作为数字进行比较时,它会选择元素的数量作为表示形式。 Perl 5 或 6 中的运算符强制转换所涉及的类型。如果要测试数组的元素是否相同,请尝试 eqv
运算符。
比较数组的长度,所以下面是正确的:
@a == @c == @x == 5
尝试:
my @a = <a b c d e>;
my @b = <1 2 3 4 5>;
@a eqv @b;
您可能想查看有关这些运算符的一些文档。智能匹配 ~~
运算符可能更符合您对 ==
.
https://docs.perl6.org/routine/$EQUALS_SIGN$EQUALS_SIGN https://docs.perl6.org/routine/$TILDE$TILDE