在列表中§
有关例程映射,请参阅上下文中的主要文档
multi method map(\SELF: )multi map(, +values)
为了说明目的,此处包含了应用于列表的示例。
对于列表,它会对每个元素调用 &code,并将返回值收集到序列中并返回。这是延迟发生的,即仅在访问返回值时才会调用 &code。示例
say ('hello', 1, 22/7, 42, 'world').map: # OUTPUT: «(Str Int Rat Int Str)»say map *.Str.chars, 'hello', 1, 22/7, 42, 'world'; # OUTPUT: «(5 1 8 2 5)»
map 检查代码对象的元数,并尝试向其传递尽可能多的参数
sub b(, ) ;say <a b x y>.map().join(', '); # OUTPUT: «a before b, x before y»
一次迭代列表中的两个项目。
请注意,map 不会展平嵌入的列表和数组,因此
((1, 2), <a b>).map()
依次将 (1, 2) 和 <a b> 传递给块,总共进行两次迭代,结果序列为 "1,2", "a,b"。
如果 &code 是 Block 循环移相器将被执行,循环控制语句将被视为循环控制流。请注意,return 在其定义的上下文中执行。它不是块的返回语句,而是周围的例程。使用 Routine 还可以处理循环控制语句和循环移相器。任何 Routine 特定的控制语句或移相器都将在该 Routine 的上下文中处理。
sub s;s# OUTPUT: «hi»
在供应中§
有关方法映射,请参阅上下文中的主要文档
method map(Supply: --> Supply)
返回一个新供应,该供应通过 &mapper 映射给定供应的每个值,并将其发送到新供应。
my = Supplier.new;my = .Supply;my = .map(-> );.tap();.emit(4); # OUTPUT: «8»
在回溯中§
有关方法映射,请参阅上下文中的主要文档
multi method map(Backtrace: --> Seq)
它对每个元素调用 &block,并将返回值收集到序列中并返回。
此程序
sub innersub outerouter;
结果为
SETTING::src/core.c/Backtrace.rakumod: 85 SETTING::src/core.c/Backtrace.rakumod: 85 test.raku: 1 test.raku: 2 test.raku: 3 test.raku: 1
在任意中§
有关例程映射,请参阅上下文中的主要文档
multi method map(\SELF: )multi map(, +values)
map 将迭代调用者,并从调用者中应用代码对象的指定位置参数数量。代码对象返回的值将成为返回的 Seq 的元素。
:$label 和 :$item 仅在内部有用,因为 for 循环会转换为 map。:$label 采用现有的 Label 来标记 .map 的循环,而 :$item 控制迭代是在 (SELF,)(如果设置了 :$item)还是 SELF 上进行。
在 sub 形式中,它将应用 code 块到 values,后者将用作调用者。
具有 |c、Iterable:D \iterable 和 Hash:D \hash 作为签名的形式将因 X::Cannot::Map 而失败,并且主要用于捕获常见陷阱。
在已下沉的 for 语句中,由映射创建的 Seq 也会下沉
say gather for 1# OUTPUT: «(0 1 2)»
在这种情况下,gather 下沉 for 语句,下沉 Seq 的结果将迭代其元素,对它们调用 .take。
在 HyperSeq 中§
有关方法映射,请参阅上下文中的主要文档
method map(HyperSeq: , *)
对 HyperSeq 使用映射,通常通过将 hyper 应用于已存在的 Seq 来创建。
在 RaceSeq 中§
有关方法映射,请参阅上下文中的主要文档
method map(RaceSeq: , *)
对 RaceSeq 使用映射,通常通过将 .race 应用于已存在的 Seq 来创建。