我有一些 JSON 存储在数据库列中,如下所示:
pokeapi=# SELECT height FROM pokeapi_pokedex WHERE species = 'Ninetales';
-[ RECORD 1 ]------------------------------------------
height | {"default": {"feet": "6'07\"", "meters": 2.0}}
作为我正在研究的“生成”算法的一部分,我想将此值放入 %hash 中,将其乘以(0.9..1.1).rand
(允许高度的“自然 10% 变化”),然后创建一个新的 %散列在相同的结构中。我的select-height
方法如下所示:
method select-height(:$species, :$form = 'default') {
my %heights = $.data-source.get-height(:$species, :$form);
my %height = %heights * (0.9..1.1).rand;
say %height;
}
这实际上要求我get-height
获得该物种的“平均”高度(公制和英制)。
method get-height (:$species, :$form) {
my $query = dbh.prepare(qq:to/STATEMENT/);
SELECT height FROM pokeapi_pokedex WHERE species = ?;
STATEMENT
$query.execute($species);
my %height = from-json($query.row);
my %heights = self.values-or-defaults(%height, $form);
return %heights;
}
但是,我在执行时收到以下错误(我假设是因为我试图将散列作为一个整体而不是散列的单个元素):
$ perl6 -I lib/ examples/height-weight.p6
{feet => 6'07", meters => 2}
Odd number of elements found where hash initializer expected:
Only saw: 1.8693857987465123e0
in method select-height at /home/kane/Projects/kawaii/p6-pokeapi/lib/Pokeapi/Pokemon/Generator.pm6 (Pokeapi::Pokemon::Generator) line 22
in block <unit> at examples/height-weight.p6 line 7
是否有一种更简单(且有效)的方法可以在不为每个元素复制我的代码的情况下执行此操作?:)