返回多个数组时避免创建临时标量

时间:2019-04-07 20:03:30

标签: perl6

从函数返回多个数组时,是否可以避免创建临时标量:

use v6;
sub func() {
    my @a = 1..3;
    my @b = 5..10;
    return @a, @b;
}
my ($x, $y) = func();
my @x := $x;  
my @y := $y;
say "x: ", @x;  # OUTPUT: x: [1 2 3]
say "y: ", @y;  # OUTPUT: y: [5 6 7 8 9 10]

我想避免创建临时变量$x$y。 注意:无法将函数调用替换为

my (@x, @y) = func()

assignment of a list to an Array is eager起,因此返回的两个数组均以@x结尾。

1 个答案:

答案 0 :(得分:11)

都不是:

my ($x, $y) = func();
my (@x, @y) = func();

但不是以下任何一个

my (@x, @y) := func();
my ($x, $y) := func();

使用@向P6发出信号,当它需要区分某些东西是单数(“单个数组”)还是复数(“单个数组中包含的项目”)时,应该是视为复数。

使用$发出相反的信号-应该将其视为单数。

您以后总是可以通过执行$@x来明确地扭转这种情况-表示P6应该对您最初声明为复数的事物使用单数透视图-或@$x发出相反的信号。

打个比方,把蛋糕切成几块。是一件事还是一堆碎片?还请注意,@会缓存片段的索引,而$只记得那是一块蛋糕。对于大量事物,这可能会有很大的不同。