在列表中§
有关例程映射,请参阅上下文中的主要文档
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
来创建。