我正在使用Cro框架在Perl 6中创建一个API服务器!该API的目的是提供有关Pokemon的数据,并提供用于根据输入数据生成Pokemon的端点。生成的因素之一是gender
,在我的PostgreSQL数据库中,每个引用Pokemon都有一个gender-ratio
列,其中包含如下所示的JSON值:
"gender-ratio": {
"default": {
"Male": 0.25,
"Female": 0.75
},
"alolan": {
"Male": 0.25,
"Female": 0.75
}
},
您会注意到我那里有两个键,分别叫default
和alolan
,这是因为Pokemon可以有多种形式,但与该问题几乎没有关系-实际的性别比例值是相关的。这是我的生成方法当前的样子:
method select-gender($pokemon, $form = 'default') {
enum GENDER ( <Male Female> );
return GENDER.pick;
}
默认情况下,pick
是随机的,在这种情况下为50/50。但是,我希望能够根据数据库返回的比率结果加权每个选项的随机性。我的想法之一是将数据库查询的结果作为GENDER
枚举的种子,因此对于特定示例,它看起来更像这样:
enum GENDER ( <Male Female Female Female> );
除非有人对我的pick
语句的结果动态更改SELECT
的行为有更好的主意?
答案 0 :(得分:10)
使用Mix和roll
:
my %gender-ratio = %(default => {
"Male" => 0.25,
"Female" => 0.75
},
alolan => {
"Male" => 0.25,
"Female" => 0.75
}
);
my Mix $default = %gender-ratio<default>.Mix;
for ^10 {
say $default.roll;
}