首页 > 解决方案 > 如何在 Perl 6 中对列表的所有元素进行功能性操作?

问题描述

例如我有一个Array数字:

> my @a = ^5
[0 1 2 3 4]

我想打印他们的正方形。我可以使用map,但它也会返回一个修改后的List(这五个Trues),这是我不想要的:

> @a.map({ put $_**2 })
0
1
4
9
16
(True True True True True)

我发现的唯一方法是使用hyper >>

> @a>>.&{ put $_**2 }
0
1
4
9
16

那么正确的方法是什么?

PS当然,我可以使用map然后put结果:

.put for @a.map: {$_**2 }

但这不是我想要的。

标签: raku

解决方案


为此目的使用map很好,因为在接收器上下文中它不会产生结果列表。在 REPL 中,需要的结果map,因此产生它的原因。但在这样的情况下:

@a.map({ put $_**2 });
say "That's all, folks";

然后结果map是不想要的,因此不会组装结果列表。如果希望真正拼出这一点,可以这样写:

sink @a.map({ put $_**2 })

请注意,例程中的最后一条语句被视为隐式返回值。使用--> Nil将足以确保最终map在接收器上下文中。

sub put-squares(@a --> Nil) {
    @a.map({ put $_**2 })
}

推荐阅读