为什么在Perl6序列上没有“每种”方法?

问题描述 投票:2回答:2

有时,我将开始在Perl 6 REPL上编写方法调用链,例如:

".".IO.dir.grep(...).map(...).

...然后我意识到我要对最终列表执行的操作是将每个元素打印在自己的行上。我希望序列具有类似each的方法,因此我可以使用.each(*.say)结束链,但是没有找到这样的方法。相反,我必须返回到该行的开头并添加.say for。感觉好像打乱了我的思想。

这是一个小麻烦,但它让我感到震惊,因为我忽略了一些简单的选择。我只能想到的是».say.join("\n").say,但是前者可以对元素进行无序操作(如果我理解正确的话),而后者构造的单个字符串可能会很大,具体取决于输入列表。

perl6
2个回答
2
投票

正如您在注释中所写,使用REPL时,只有另一个.map(*.say)也会创建具有True值的行。您可以尝试在最后一个map语句之后调用.sink方法。

".".IO.dir.grep({$_.contains('e')}).map(*.uc).map(*.say).sink

0
投票

您可以自己滚动。

use MONKEY;

augment class Any 
{ 
    method each( &block )
    {
        for self -> $value { 
            &block( $value );
        }
    }
};

List.^compose;
Seq.^compose;

(1, 2).each({ .say });
(2, 3).map(* + 1).each({ .say });

# 1
# 2
# 3
# 4

如果您愿意,那么您就有第一个CPAN模块机会。

© www.soinside.com 2019 - 2024. All rights reserved.