为什么这个Duckmap阻塞了?

时间:2019-05-09 06:46:14

标签: perl6

我正在尝试使用此功能列出目录中的所有文件:

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;
}

第一个duckmap是列出所有子目录,第二个(尚未完成)是将IO对象转换为Str。

有人知道第二个为什么不停止吗?

1 个答案:

答案 0 :(得分:5)

正如Hakon所说,这是一个无限循环。这是固定的代码:

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});
}