is List
Slip
是 List
,它会自动展平为外部列表(或其他类似列表的容器或可迭代对象)。
例如,它允许您编写一个 map,该 map 会在不嵌套的情况下生成多个值到结果中
say <a b c>.map().join('|'); # OUTPUT: «a|A|b|B|c|C»
相反,当返回一个普通列表时,结果列表将被嵌套
say <a b c>.map().join('|'); # OUTPUT: «a A|b B|c C»
要创建 Slip
,可以通过调用 Slip
方法将另一种类似列表的类型强制转换为它,或使用 slip
子例程
# This says "1" and then says "2", rather than saying "(1 2)".say for gather
还可以使用 prefix:<|>
运算符创建 Slip
。这与 slip
子例程在优先级和对单个参数的处理上不同。事实上,prefix:<|>
只接受一个参数,因此,从这个角度来看,它的行为更接近 .Slip
方法,而不是 slip
子例程。
my = (1, 2, 3);say (1, slip 2, 3).raku; # says (1, 2, 3) , slips 2, 3 into (1, …)say (0, slip , 4).raku; # says (0, $(1, 2, 3), 4) , $l does not break apartsay (0, slip ).raku; # says (0, 1, 2, 3) , slips from $l into (0, …)say (0, .Slip).raku; # says (0, 1, 2, 3) , slips from $l into (0, …)say (0, .Slip, 4).raku; # says (0, 1, 2, 3, 4) , slips from $l into (0, …, 4)say (|).raku; # says slip(1, 2, 3) , breaks apart $lsay (0, (|, 4), 5); # says (0 (1 2 3 4) 5) , slips from $l into (…, 4)say (0, (.Slip, 4), 5); # says (0 (1 2 3 4) 5) , slips from $l into (…, 4)say (0, (slip , 4), 5); # says (0 (1 2 3) 4 5) , slips ($l, 4) into (0, …, 5)say (0, (, 4).Slip, 5); # says (0 (1 2 3) 4 5) , slips ($l, 4) into (0, …, 5)
不想为迭代生成值的循环使用 Slip
,而不是空 List
,不运行其块的 if
语句也是如此。
请注意,prefix:<|>
还会以滑动方式将参数应用于例程调用。它不会将 Slip
转发到被调用的例程,其中包括 return
和 take
。
my \l = gather for 1..10 -> , ; say l.raku;# OUTPUT: «((1, 2), (3, 4), (5, 6), (7, 8), (9, 10)).Seq»my \m= gather for 1..10 -> , ; say m.raku;# OUTPUT: «(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).Seq»
方法§
方法列表§
multi method List(Slip: --> List)
将其转换为列表。
子滑块§
multi slip(--> Empty)multi slip( --> Slip)multi slip(+args --> Slip)
通过对由它们形成的对象调用 .Slip
从其参数创建 Slip
。如果使用空参数调用,则返回 Empty
。
常量§
常量 Empty§
Empty
是空 List
的 Slip
。
say "".comb ~~ Empty;# OUTPUT: «True»
例如,这些带有失败测试的构造返回 Empty
do if 0 ;(42 if 0);do with Any ;(42 with Any);