在列表中§
有关例程 roll,请参阅主要文档 in context
multi roll(, * --> Seq)multi method roll(List: --> Seq)multi method roll(List: --> Mu)
如果提供了 $count
:返回一个由 $count
元素组成的序列,每个元素都从列表中随机选择。每个随机选择都是独立进行的,就像一个单独的骰子投掷,其中每个骰子面都是一个列表元素。如果将 *
传递为 $count
,则返回一个惰性、无限的序列,其中包含从原始列表中随机选择的元素。
如果省略了 $count
:从列表中返回一个随机项,如果列表为空,则返回 Nil
示例
say <a b c d e>.roll; # 1 random lettersay <a b c d e>.roll: 3; # 3 random letterssay roll 8, <a b c d e>; # 8 random lettersmy := (^10).roll(*);say [^15]; # 15 random digits
在任意位置§
有关方法 roll,请参阅主要文档 in context
multi method roll(--> Any)multi method roll( --> Seq)
通过应用其 .list
方法将调用者强制转换为 list
,并在其上使用 List.roll
。
my Mix = ("þ" xx 3, "ð" xx 4, "ß" xx 5).Mix;say .roll; # OUTPUT: «ð»say .roll(5); # OUTPUT: «(ß ß þ ß þ)»
在这种情况下,$m
会转换为一个列表,然后在其上掷一个(在这种情况下是加权的)骰子。有关更多信息,另请参阅 List.roll
。
在角色 Setty 中§
有关方法 roll,请参阅主要文档 in context
multi method roll( = 1)
返回一个惰性列表,其中包含 $count
个元素,每个元素都从集合中随机选择。每个随机选择都是独立进行的,就像一个单独的骰子投掷,其中每个骰子面都是一个集合元素。
如果将 *
传递为 $count
,则列表是无限的。
在角色 Baggy 中§
有关方法 roll,请参阅主要文档 in context
multi method roll(Baggy: --> Any)multi method roll(Baggy: --> Seq)
就像一个普通的列表 roll,但返回调用者的键,其权重由其值决定,就好像键被复制了与相应值指示的次数一样,然后使用列表 roll。掷骰子的基本隐喻是,你掷出 $count
个彼此独立的骰子,这(在袋子术语中)相当于从袋子中挑选一个彩色大理石,然后放回去,并执行此操作 $count
次。在骰子术语中,大理石的数量对应于面的数量,而同色大理石的数量对应于同色面的数量。(有关“不放回抽样”,请参阅 pick)。
如果将 *
传递给 $count
,则返回一个惰性、无限的序列,其中包含从调用者中随机选择的元素。
my = bag <eggs bacon bacon bacon>;say .roll; # OUTPUT: «bacon»say .roll(3); # OUTPUT: «(bacon eggs bacon)»my := .roll(*);say [^5]; # OUTPUT: «(bacon eggs bacon bacon bacon)»
在范围内§
有关方法 roll,请参阅上下文中的主要文档
multi method roll(Range: --> Any)multi method roll(Range: --> Seq)
执行与Range.list.roll
相同的功能,但尝试通过在不必要时实际生成列表来进行优化。
在角色 Mixy 中§
有关方法 roll,请参阅上下文中的主要文档
method roll( = 1)
在角色 Enumeration 中§
有关方法 roll,请参阅上下文中的主要文档
multi method roll(::?CLASS:)multi method roll(::?CLASS: \n)multi method roll(::?CLASS: *)
它们作用于已定义的类,选择一个或n
个元素,而不消除它们。
say Norse-gods.roll() for ^3; # OUTPUT: «FreijaFreijaOðin»
在枚举 Bool 中§
有关例程 roll,请参阅上下文中的主要文档
multi method roll(Bool --> Bool)multi method roll(Bool --> Seq)
如果未带任何参数调用,则返回True
或False
。否则,返回随机选择的$count
个元素。请注意,从enum
中的每次随机选择都是独立进行的,就像一个单独的掷硬币,硬币的每一面都代表enum
的两个值之一。如果将*
作为$count
传递,则返回一个无限的Seq
的Bool
。
say Bool.roll; # OUTPUT: «True»say Bool.roll(3); # OUTPUT: «(True False False)»say Bool.roll(*); # OUTPUT: «(...)»