Позже я заметил, что документы вводят в заблуждение здесь. Только некоторые закрывающие скобки будут следовать за этим. Это зависит от состояния парсера Perl 6. Это не очень хорошее правило.
л этот пример изДень 10 - операторы фидов Perl 6 2010 Advent Calendar с небольшим изменением.uc
для.ucfirst
этого больше нет
my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
@rakudo-people
==> grep { /at/ } ==> map { .uc } ==> my @who-it's-at;
say ~@who-it's-at;
Я пишу это немного по-другому с некоторыми дополнительными пробелами:
my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
@rakudo-people
==> grep { /at/ }
==> map { .uc } ==> my @who-it's-at;
say ~@who-it's-at;
Теперь это «поддельное утверждение»:
===SORRY!=== Error while compiling ...
Bogus statement
------> ==> grep { /at/ }⏏<EOL>
expecting any of:
postfix
prefix
statement end
term
Это не проблема только с этим примером. Некоторые примеры в текущих документах могут демонстрировать такое же поведение.
Если я добавлюunspace до конца оскорбительной строки снова работает:
my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
@rakudo-people
==> grep { /at/ } \
==> map { .uc } ==> my @who-it's-at;
say ~@who-it's-at;
Любопытно, что комментарий в конце этой строки не работает. Я бы подумал, что съел бы оскорбительные пробелы.
оператор подачи говорит:
В случае процедур / методов, которые принимают один аргумент или когда первый аргумент является блоком, часто требуется, чтобы вы вызывали скобки
Это работает:
my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
@rakudo-people
==> grep( { /at/ } )
==> map { .uc } ==> my @who-it's-at;
say ~@who-it's-at;
Но почему это не проблема в первом классе? Что здесь делают пробелы? И какие ситуации входят в «часто необходимые»?