raku - 如何在 Perl 6 中对列表的所有元素进行功能性操作?
问题描述
例如我有一个Array
数字:
> my @a = ^5
[0 1 2 3 4]
我想打印他们的正方形。我可以使用map
,但它也会返回一个修改后的List
(这五个True
s),这是我不想要的:
> @a.map({ put $_**2 })
0
1
4
9
16
(True True True True True)
我发现的唯一方法是使用hyper >>
:
> @a>>.&{ put $_**2 }
0
1
4
9
16
但
- 语法有点笨拙(可能我没有按预期做)
- 如果我不想让它工作怎么办
hyper
?
那么正确的方法是什么?
PS当然,我可以使用map
然后put
结果:
.put for @a.map: {$_**2 }
但这不是我想要的。
解决方案
为此目的使用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 })
}
推荐阅读
- pine-script - 根据 4H 时间帧的数据在 30m TF 上绘制一条线
- python - 熊猫 groupby 与最小
- react-native - undefined 不是试图在组件中使用 setTimeout 的对象(评估“fun.__callAsync”)
- android - React Native Flipper 调试问题:“未选择应用程序”
- hibernate - EntityManager 正在阻止数据库触发器
- jsf - Jsf InputText 无法与条形码扫描仪一起正常工作
- image - 如何使用 v-if 语句在 vuejs 中显示静态图像
- .net-core - 为什么强制降级会导致 .Net Core 中的程序集加载异常?
- r - 如果在 R 中使用单独的,则在此符号周围使用管道和其他空格进行拆分
- c# - 自动断线 PdfTable 单元格 PdfFileWriter c#