在任何§
请参阅 上下文中 的主要文档,了解方法 duckmap
method duckmap() is rw is nodal
duckmap
将对以可应用 &block
的方式表现的每个元素应用 &block
。如果失败,它将尽可能递归下降,否则将返回未经任何转换的项目。如果对象是 Associative
,它将对值执行操作。
<a b c d e f g>.duckmap(-> where <c d e>.any ).say;# OUTPUT: «(a b C D E f g)»(('d', 'e'), 'f').duckmap(-> where <e f>.any ).say;# OUTPUT: «((d E) F)».duckmap(-> where <e f>.any ).say;# OUTPUT: «{first => (d E), second => F}»
在第一个案例中,它应用于 c
、d
和 e
,它们满足应用该块({ .uc }
)的条件;其余部分按原样返回。
在第二个案例中,第一个项目是不满足条件的列表,因此对其进行访问;该扁平列表将以与第一个列表相同的方式表现。在这种情况下
say [[1,2,3],[[4,5],6,7]].duckmap( *² ); # OUTPUT: «[9 9]»
只要表现得像数字,你就可以对任何东西求平方。在这种情况下,有两个数组,每个数组有 3 个元素;这些数组将转换为数字 3 并求平方。但在下一个案例中
say [[1,2,3],[[4,5],6.1,7.2]].duckmap( -> Rat );# OUTPUT: «[[1 2 3] [[4 5] 37.21 51.84]]»
3 项列表不是 Rat
,因此它递归下降,但最终只将操作应用于那些像 Rat
一样行走(或爬行,视情况而定)的列表。
尽管从表面(和名称)上看,duckmap
可能看起来类似于 deepmap
,但后者无论项目的类型如何都会递归应用。