class Slip is List {}

SlipList,它会自动展平为外部列表(或其他类似列表的容器或可迭代对象)。

例如,它允许您编写一个 map,该 map 会在不嵌套的情况下生成多个值到结果中

say <a b c>.map({ ($_$_.uc).Slip }).join('|');        # OUTPUT: «a|A|b|B|c|C␤» 

相反,当返回一个普通列表时,结果列表将被嵌套

say <a b c>.map({ $_$_.uc }).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 {
    take slip(12);
}

还可以使用 prefix:<|> 运算符创建 Slip。这与 slip 子例程在优先级和对单个参数的处理上不同。事实上,prefix:<|> 只接受一个参数,因此,从这个角度来看,它的行为更接近 .Slip 方法,而不是 slip 子例程。

my $l = (123);
say (1slip 23).raku;  # says (1, 2, 3)          , slips 2, 3 into (1, …) 
say (0slip $l4).raku# says (0, $(1, 2, 3), 4) , $l does not break apart 
say (0slip $l).raku;    # says (0, 1, 2, 3)       , slips from $l into (0, …) 
say (0$l.Slip).raku;    # says (0, 1, 2, 3)       , slips from $l into (0, …) 
say (0$l.Slip4).raku# says (0, 1, 2, 3, 4)    , slips from $l into (0, …, 4) 
say (|$l).raku;           # says slip(1, 2, 3)      , breaks apart $l 
say (0, (|$l4), 5);     # says (0 (1 2 3 4) 5)    , slips from $l into (…, 4) 
say (0, ($l.Slip4), 5); # says (0 (1 2 3 4) 5)    , slips from $l into (…, 4) 
say (0, (slip $l4), 5); # says (0 (1 2 3) 4 5)    , slips ($l, 4) into (0, …, 5) 
say (0, ($l4).Slip5); # says (0 (1 2 3) 4 5)    , slips ($l, 4) into (0, …, 5) 

不想为迭代生成值的循环使用 Slip,而不是空 List,不运行其块的 if 语句也是如此。

请注意,prefix:<|> 还会以滑动方式将参数应用于例程调用。它不会将 Slip 转发到被调用的例程,其中包括 returntake

my \l = gather for 1..10 -> $a$b { take |($a$b}say l.raku;
# OUTPUT: «((1, 2), (3, 4), (5, 6), (7, 8), (9, 10)).Seq␤» 
my \m= gather for 1..10 -> $a$b { take ($a$b).Slip }say m.raku;
# OUTPUT: «(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).Seq␤»

方法§

方法列表§

multi method List(Slip:D: --> List:D)

将其转换为列表。

子滑块§

multi slip(--> Empty)
multi slip(@args --> Slip:D)
multi slip(+args --> Slip:D)

通过对由它们形成的对象调用 .Slip 从其参数创建 Slip。如果使用空参数调用,则返回 Empty

常量§

常量 Empty§

Empty 是空 ListSlip

say "".comb ~~ Empty;
# OUTPUT: «True␤»

例如,这些带有失败测试的构造返回 Empty

do if 0 {};
(42 if 0);
do with Any {};
(42 with Any);

类型图§

Slip 的类型关系
raku-type-graph Slip Slip List List Slip->List Mu Mu Any Any Any->Mu Cool Cool Cool->Any Positional Positional Iterable Iterable List->Cool List->Positional List->Iterable

展开上面的图表