为什么这个鸭地图会阻止?

问题描述 投票:7回答:1

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

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。

任何人都知道第二个为什么不停止吗?

raku
1个回答
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});
}
© www.soinside.com 2019 - 2024. All rights reserved.