perl6/rakudo: невозможно проанализировать postcircumfix:sym<()>
Почему я получаю это сообщение об ошибке?
#!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
2 ответа
Решение
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;
}
Многомерный синтаксис (использование ;
внутри паренов) и почтовый индекс в более чем двух списках, оба работают, поэтому первоначально опубликованный код работает (если вы предоставляете некоторый реальный код, а не { ... }
блок заглушки).