从函数返回多个数组时是否可以避免创建临时标量:
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 . 注意:不能用替换函数调用
$x
$y
my (@x, @y) = func()
自从 assignment of a list to an Array is eager 因此,两个返回的数组最终都是 @x .
Array
@x
不是以下任何一种:
my ($x, $y) = func(); my (@x, @y) = func();
my (@x, @y) := func(); my ($x, $y) := func();
使用 @ 向P6发出信号,当它需要区分某个事物是单数的--“单个数组”--还是复数的--“单个数组中包含的项”--它应该被视为复数。
@
$ 以另一种方式发出信号——它应该被视为单数。
$
您以后可以通过执行 $@x --要发出P6的信号,应该使用单数透视图来表示您最初声明为复数的东西——或者 @$x 向相反方向发出信号。
$@x
@$x
打个比方,想想把蛋糕切成几块。是一件东西还是一堆碎片?还要注意的是 @ $ 只记得那是个蛋糕。对于一大堆事情来说,这会有很大的不同。