perl6/rakudo:无法分析后循环修复程序:sym<;()>;

perl6/rakudo:无法分析后循环修复程序:sym<;()>;,raku,rakudo-star,Raku,Rakudo Star,为什么我会收到此错误消息 #!perl6 use v6; my @a = 1..3; my @b = 7..10; my @c = 'a'..'d'; for zip(@a;@b;@c) -> $nth_a, $nth_b, $nth_c { ... }; # Output: # ===SORRY!=== # Unable to parse postcircumfix:sym<( )>, couldn't find final ')' at line 9 #!pe

为什么我会收到此错误消息

#!perl6
use v6;

my @a = 1..3;
my @b = 7..10;
my @c = 'a'..'d';


for zip(@a;@b;@c) -> $nth_a, $nth_b, $nth_c { ... };


# Output:

# ===SORRY!===
# Unable to parse postcircumfix:sym<( )>, couldn't find final ')' at line 9
#!perl6
使用v6;
我的@a=1..3;
我的@b=7..10;
my@c='a'..'d';
邮政编码(@a;@b;@c)->$n_a,$n_b,$n_c{…};
#输出:
#对不起===
#无法分析postcircumfix:sym,在第9行找不到final')

Rakudo还没有实现lol(“列表列表”)表单,因此无法解析
@a@b@c
。出于同样的原因,
zip
还没有包含三个列表的表单。很明显,错误信息并不可怕

目前还没有一个很好的解决办法,但这里有一些方法可以完成这项工作:

sub zip3(@a, @b, @c) {
    my $a-list = flat(@a.list);
    my $b-list = flat(@b.list);
    my $c-list = flat(@c.list);
    my ($a, $b, $c);
    gather while ?$a-list && ?$b-list && ?$c-list {
        $a = $a-list.shift unless $a-list[0] ~~ ::Whatever;
        $b = $b-list.shift unless $b-list[0] ~~ ::Whatever;
        $c = $c-list.shift unless $c-list[0] ~~ ::Whatever;
        take ($a, $b, $c);
    }
}

for zip3(@a,@b,@c) -> $nth_a, $nth_b, $nth_c {
    say $nth_a ~ $nth_b ~ $nth_c;
}

多维语法(在parens中使用
)和两个以上列表的zip都可以工作,因此最初发布的代码现在可以工作了(如果您提供一些真实代码而不是
{…}
存根块)