Как я могу использовать "карту" внутри цикла "для" в Perl 6?
Я пытаюсь использовать map
внутри for
цикл, но этот код не работает. Этот код должен напечатать 1
а также 2
три раза. Но приведенный ниже код не производит вывода. Это будет работать только частично, если вы раскомментируете exit
линия. Есть идеи почему? Я протестировал его, используя текущую версию Perl 6 (версия Rakudo 2015.12-79-g4bb47d5, построенная на версии 2015.12 MoarVM, а также версия Windows).
for (1..3) {
map { say $_ }, (1..2);
# exit;
}
1 ответ
Давайте посмотрим на
say (map { say $_ }, 1..2).WHAT;
Это говорит нам &map
возвращает Seq
, который является ленивой конструкцией.
Кроме того, последнее утверждение в теле for
цикл используется для агрегирования его возвращаемого значения, ср
my @list = do for 1..3 {
map { say $_ }, 1..2;
}
say .WHAT for @list;
Если вы добавите еще одно заявление после вызова &map
, вызов будет в "контексте приемника" и будет оценен с нетерпением.
Это также может быть вызвано явно:
for 1..3 {
sink map { say $_ }, 1..2;
}
В качестве альтернативы, просто используйте другой for
цикл:
for 1..3 {
.say for 1..2;
}