首页 > 解决方案 > [] 在 Perl 6 中使用匿名函数减少

问题描述

我们可以使用reduce带有sub两个参数的 a,将其放在双括号中:

> sub mysum { $^a + $^b }
> [[&mysum]] 1,3,5
9

但是如果我们想使用匿名函数呢?

以下两种变体都会产生编译错误:

> [[&{ $^a + $^b }]] 1,3,5
> [[{ $^a + $^b }]] 1,3,5

标签: syntaxfunctional-programmingraku

解决方案


你不能有任何以这种形式减少的空间。

> [[&({$^a+$^b})]] 1, 3, 5
9

这是为了更明显的是它是一个 reduce,而不是一个数组声明。

> [ { $^a + $^b }, { $^a * $^b } ].pick.(3,5)
8 | 15

double[[…]]只是允许将任何函数用作中缀运算符的扩展。

请注意&(…),当不谈论命名函数&foo或已经存在的中缀运算符时,您必须在此功能中使用。

> 3 [&( { $^a + $^b } )] 5
8

[…]这是使用括号元运算符的一种扩展,例如Z=

> @a [Z[[+]=]] 1..5
> @a Z[[+]=] 1..5
> @a Z[+=] 1..5
> @a Z+= 1..5

推荐阅读