Почему эта карта уток блокируется? - PullRequest
7 голосов
/ 09 мая 2019

Я пытаюсь перечислить все файлы в каталоге с помощью этой функции:

sub list-directory($dir = '.') {
    my @todo = $dir.IO.dir;
    @todo = @todo.duckmap( -> $_ where $_.d { @todo.push($_.IO.dir); } );
    @todo = @todo.duckmap( -> $_ where IO {.Str} );
    return @todo;
}

Первая карта утка - список всех подкаталогов, а вторая (это не заканчивается) - преобразованиеIO возражает против Str.

Кто-нибудь знает, почему второй не останавливается?

1 Ответ

5 голосов
/ 09 мая 2019

Как сказал Хакон, это был бесконечный цикл.Вот исправленный код:

sub list-directory($dir = '.') {
    my @todo = $dir.IO.dir;
    @todo = @todo.duckmap( -> $_ where $_.d { @todo.push($_.IO.dir); $_; } );
    grep { !.IO.d }, @todo.List.flat;
    @todo.map({.Str});
}
...