Я создаю сервер API на Perl 6, используя платформу Cro! Целью этого API является предоставление данных о покемонах и предоставление конечных точек для генерации покемонов на основе входных данных. Одним из факторов генерации является gender
, в моей базе данных PostgreSQL каждый эталонный покемон имеет столбец gender-ratio
, который содержит значение JSON, которое выглядит следующим образом:
"gender-ratio": {
"default": {
"Male": 0.25,
"Female": 0.75
},
"alolan": {
"Male": 0.25,
"Female": 0.75
}
},
Вы заметите, что у меня есть два ключа, которые называются default
и 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
оператора?