代码之家  ›  专栏  ›  技术社区  ›  Håkon Hægland

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

  •  0
  • Håkon Hægland  · 技术社区  · 5 年前

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

    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 .

    0 回复  |  直到 5 年前
        1
  •  11
  •   raiph    5 年前

    不是以下任何一种:

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

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

    使用 @ 向P6发出信号,当它需要区分某个事物是单数的--“单个数组”--还是复数的--“单个数组中包含的项”--它应该被视为复数。

    $ 以另一种方式发出信号——它应该被视为单数。

    您以后可以通过执行 $@x --要发出P6的信号,应该使用单数透视图来表示您最初声明为复数的东西——或者 @$x 向相反方向发出信号。

    打个比方,想想把蛋糕切成几块。是一件东西还是一堆碎片?还要注意的是 @ $ 只记得那是个蛋糕。对于一大堆事情来说,这会有很大的不同。

    推荐文章