gpt4 book ai didi

raku - 如何在 Perl 6 中声明数字散列的散列?

转载 作者:行者123 更新时间:2023-12-03 16:53:39 26 4
gpt4 key购买 nike

默认情况下,散列将所有键转换为字符串。当您的 key 是可能接近的数字时,这会导致问题:

> my %h; %h{1/3} = 1; %h{0.333333} = 2; dd %h;
Hash %h = {"0.333333" => 2}

当然,这可以修复如下:
>  my %h{Real}; %h{1/3} = 1; %h{0.333333} = 2; dd %h;
Hash[Any,Real] %h = (my Any %{Real} = 0.333333 => 2, <1/3> => 1)

但现在我需要一个数字散列的散列,例如 { 1/3 => { 2/3 => 1, 0.666667 => 2 } } .
> my %h{Real}; %h{1/3}{2/3} = 1; %h{1/3}{0.666667} = 2; dd %h;
Hash[Any,Real] %h = (my Any %{Real} = <1/3> => ${"0.666667" => 2})

我该如何解决?

我能想出的最好方法是以下解决方法:
> my %h{Real}; %h{1/3} //= my %{Real}; %h{1/3}{2/3} = 1; %h{1/3}{0.666667} = 2; dd %h;
Hash[Any,Real] %h = (my Any %{Real} = <1/3> => $(my Any %{Real} = <2/3> => 1, 0.666667 => 2))

但这很烦人。

最佳答案

以下工作:

my Hash[Real,Real] %h{Real};
%h{1/3} .= new;
%h{1/3}{2/3} = 1;

这不是很好。

以下也可以作为一种解决方法。

my Hash[Real,Real] %h{Real};
%h does role {
method AT-KEY (|) is raw {
my \result = callsame;
result .= new unless defined result;
result
}
}

%h{1/3}{2/3} = 1;

say %h{1/3}{2/3}; # 1

如果您有多个这样的变量:

role Auto-Instantiate {
method AT-KEY (|) is raw {
my \result = callsame;
result .= new unless defined result;
result
}
}

my Hash[Real,Real] %h{Real} does Auto-Instantiate;

关于raku - 如何在 Perl 6 中声明数字散列的散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51123972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com