raku - 为什么 Perl6 序列上没有 "each"方法?

标签 raku

有时我会开始在 Perl 6 REPL 中编写一系列方法调用,例如:

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

...然后我意识到我想要对最终列表做的是将每个元素打印在自己的行上。我希望序列有类似 each方法,所以我可以用 .each(*.say) 结束链,但是我找不到这样的方法。相反,我必须返回到行首并添加 .say for .感觉就像它打破了我的思绪。

这是一个小烦恼,但它让我感到如此明显的遗漏,以至于我想知道我是否错过了一些简单的替代方案。我能想到的只有».say.join("\n").say ,但前者可以无序地对元素进行操作(如果我理解正确的话),后者构造一个可能有问题的单个字符串,具体取决于输入列表。

最佳答案

你可以自己滚动。

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 模块机会就在那里。

关于raku - 为什么 Perl6 序列上没有 "each"方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58207313/

相关文章:

raku - 如何删除列表中的重复项 (Raku)

lisp - 在 Lisp 中实现无限连续整数列表以进行惰性求值

unicode - 如何在 Perl6 中按名称搜索 Unicode 代码点?

search - 在 Perl6 中用彩色文本替换 HTML <i> 标签

raku - 让perl6调用由subtype(subset)专门化的正确的multi sub

raku - Raku 中的有理数

raku - 如何存储 run 或 shell 返回的值?

oop - 在Raku中将Role混合到对象中时,`does`与`but`运算符

raku - 导入一个 module::class 并通过它的短名称引用它