perl6 – Baggy add()是否适用于MixHash权重?

前端之家收集整理的这篇文章主要介绍了perl6 – Baggy add()是否适用于MixHash权重?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用MixHash将两个Hashes与Bag add()运算符组合在一起.这似乎有效 – 但是…我有点惊讶的是,工会的结果需要重新强制回到MixHash.

我的猜测是Bag add()中缀操作符首先将所有内容强制转换为Bag并将结果作为Bag返回.这对我来说可能有风险,因为我的一些重量是负的(因此首先是混合).这会正确地增加负重吗?

或者,是否有Mix add()运算符?

my MixHash $dim-mix;
for ... {
    my $add-mix = $!dims.MixHash;
    $dim-mix = $dim-mix ?? ( $dim-mix (+) $add-mix ).MixHash !! $add-mix;
}
dd $dim-mix;

现在我看看这个释义代码,也许有一些三元的表述? !既然已经在左边了,可以避免在测试中拼出$dim-mix?

非常感谢任何建议!

解决方法

my $add-mix = (foo => 0.22,bar => -0.1).Mix;

my $dim-mix;
for ^5 {
  $dim-mix (+)= $add-mix;
}
dd $dim-mix; # Mix $dim-mix = ("foo"=>1.1,"bar"=>-0.5).Mix

显然我没有使用过MixHash,但如果需要在循环之后你可以对它进行排序.

(当然你可能会想“但不是混合不可变?”它是 – 但你必须区分变量和值.$dim-mix是一个变量,一个标量变量.即使你输入它 – 我的Mix $dim-mix;它仍然是一个包含Mix值的Scalar变量.你总是可以分配一个Scalar.)

我开始习惯这样的问题,我不知道发生了什么,但我认为我应该能够弄清楚.这是我的过程:

>我让你的代码运行,看看它做了什么.我试图简化三元组.嗯.
>我转向了医生.有the doc page for (+).这称之为“Baggy addition”.鉴于Bag只保留(正)整数,这令人担忧.
>我转向了源头.我解雇了a search of the rakudo sources for “Baggy addition”.一个结果.我专注于the multi with (Mixy:D $a,QuantHash:D $b) signature.这告诉我结果应该保持Mixy,即医生的暗示它会或者可能会去Baggy是一个红鲱鱼.
>我回到了代码,开始想知道我能做些什么.当我最初尝试使用()=来简化主要赋值时,编译器抱怨期望MixHash但得到了Mix.我尝试了六个不起作用的东西然后只是将$dim-mix上的MixHash约束更改为Mixy并且它起作用了.
>然后我仔细考虑了发生了什么,并意识到几乎所有类型都阻碍了P6做正确的事情.

如果确实需要,可以添加一些类型.

(但你真的需要它们吗?当类型是绝对必要的时候它们是伟大的.否则,imo,三思而后,再两次,然后再介绍它们.它们很容易使代码更难阅读,推理,撰写和更慢.)

(当然,在某些情况下,它们并不是绝对必要的,但确实对整体有所帮助.Imo,就像所有事情一样,一开始就保持简单,只有当你看到特定代码行的明显好处时才会复杂化.)

猜你在找的Perl相关文章