在列表中§

有关例程 roll,请参阅主要文档 in context

multi        roll($count*@list --> Seq:D)
multi method roll(List:D: $count --> Seq:D)
multi method roll(List:D: --> Mu)

如果提供了 $count:返回一个由 $count 元素组成的序列,每个元素都从列表中随机选择。每个随机选择都是独立进行的,就像一个单独的骰子投掷,其中每个骰子面都是一个列表元素。如果将 * 传递为 $count,则返回一个惰性、无限的序列,其中包含从原始列表中随机选择的元素。

如果省略了 $count:从列表中返回一个随机项,如果列表为空,则返回 Nil

示例

say <a b c d e>.roll;       # 1 random letter 
say <a b c d e>.roll: 3;    # 3 random letters 
say roll 8, <a b c d e>;    # 8 random letters 
 
my $random-digits := (^10).roll(*);
say $random-digits[^15];    # 15 random digits

在任意位置§

有关方法 roll,请参阅主要文档 in context

multi method roll(--> Any)
multi method roll($n --> Seq)

通过应用其 .list 方法将调用者强制转换为 list,并在其上使用 List.roll

my Mix $m = ("þ" xx 3"ð" xx 4"ß" xx 5).Mix;
say $m.roll;    # OUTPUT: «ð␤» 
say $m.roll(5); # OUTPUT: «(ß ß þ ß þ)␤»

在这种情况下,$m 会转换为一个列表,然后在其上掷一个(在这种情况下是加权的)骰子。有关更多信息,另请参阅 List.roll

在角色 Setty 中§

有关方法 roll,请参阅主要文档 in context

multi method roll($count = 1)

返回一个惰性列表,其中包含 $count 个元素,每个元素都从集合中随机选择。每个随机选择都是独立进行的,就像一个单独的骰子投掷,其中每个骰子面都是一个集合元素。

如果将 * 传递为 $count,则列表是无限的。

在角色 Baggy 中§

有关方法 roll,请参阅主要文档 in context

multi method roll(Baggy:D: --> Any:D)
multi method roll(Baggy:D: $count --> Seq:D)

就像一个普通的列表 roll,但返回调用者的键,其权重由其值决定,就好像键被复制了与相应值指示的次数一样,然后使用列表 roll。掷骰子的基本隐喻是,你掷出 $count 个彼此独立的骰子,这(在袋子术语中)相当于从袋子中挑选一个彩色大理石,然后放回去,并执行此操作 $count 次。在骰子术语中,大理石的数量对应于面的数量,而同色大理石的数量对应于同色面的数量。(有关“不放回抽样”,请参阅 pick)。

如果将 * 传递给 $count,则返回一个惰性、无限的序列,其中包含从调用者中随机选择的元素。

my $breakfast = bag <eggs bacon bacon bacon>;
say $breakfast.roll;                                  # OUTPUT: «bacon␤» 
say $breakfast.roll(3);                               # OUTPUT: «(bacon eggs bacon)␤» 
 
my $random_dishes := $breakfast.roll(*);
say $random_dishes[^5];                               # OUTPUT: «(bacon eggs bacon bacon bacon)␤»

在范围内§

有关方法 roll,请参阅上下文中的主要文档

multi method roll(Range:D:         --> Any:D)
multi method roll(Range:D: $number --> Seq:D)

执行与Range.list.roll相同的功能,但尝试通过在不必要时实际生成列表来进行优化。

在角色 Mixy 中§

有关方法 roll,请参阅上下文中的主要文档

method roll($count = 1)

类似于Bag.roll,但使用Real权重而不是整数权重。

在角色 Enumeration 中§

有关方法 roll,请参阅上下文中的主要文档

multi method roll(::?CLASS:U:)
multi method roll(::?CLASS:U: \n)
multi method roll(::?CLASS:D: *@pos)

它们作用于已定义的类,选择一个或n个元素,而不消除它们。

say Norse-gods.roll() for ^3;  # OUTPUT: «Freija␤Freija␤Oðin␤» 

在枚举 Bool 中§

有关例程 roll,请参阅上下文中的主要文档

multi method roll(Bool:U --> Bool:D)
multi method roll(Bool:U $count --> Seq:D)

如果未带任何参数调用,则返回TrueFalse。否则,返回随机选择的$count个元素。请注意,从enum中的每次随机选择都是独立进行的,就像一个单独的掷硬币,硬币的每一面都代表enum的两个值之一。如果将*作为$count传递,则返回一个无限的SeqBool

say Bool.roll;                                    # OUTPUT: «True␤» 
say Bool.roll(3);                                 # OUTPUT: «(True False False)␤» 
say Bool.roll(*);                                 # OUTPUT: «(...)␤»