8

我正在使用 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
    }
  },

你会注意到我有两个键叫做defaultand alolan,这是因为口袋妖怪可以有多种形式,但它与这个问题几乎无关——相关的是实际的性别比例值。这是我的生成方法目前的样子:

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陈述结果动态改变的行为有更好的想法?

4

1 回答 1

10

使用混合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;
}
于 2019-04-18T09:46:11.807 回答