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

问题描述 投票:8回答:1

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

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

perl6
1个回答
11
投票

不是:

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

但改为:

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

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

使用$以相反的方式发出信号 - 它应该被视为单数。

你可以随后通过执行$@x明确地反转这一点 - 信号P6应该使用单数透视图来表示你最初宣称为复数的东西 - 或者@$x用信号反转相反的信号。

比喻一下,把蛋糕切成几块。是一件事还是一堆件?另请注意,@缓存了碎片的索引,而$只记得它是一块蛋糕。对于大量的东西,这可以产生很大的不同。

© www.soinside.com 2019 - 2024. All rights reserved.