gpt4 book ai didi

mixins - 有没有办法(隐式)删除 Raku 角色混入?

转载 作者:行者123 更新时间:2023-12-04 11:22:07 25 4
gpt4 key购买 nike

这个新问题是对我 previous 的跟进当我充实事物时就出现了。请注意,我也做了一些研究,我有意识地避开了提到的标量混合错误 here .所以我将角色混合到对象而不是标量容器中。
大图是做数学运算,也执行简单的错误计算。
这是我失败的代码的简明版本:

  1 role Error {       
2 has $.abs-error
3 }
4
5 multi prefix:<-> ( Error:D $x ) is default {
6 # - $x; # fails - enters an infinite loop
7 # - $x.Real; # fails - does not drop the Error mixin
8 ( 0 - $x ) does Error($x.abs-error) # works - but relies on the infix:<-> form
9 }
10
11 my $dog = 12.5 does Error(0.5);
12
13 #what i have...
14 say $dog; #12.5
15 say $dog.WHAT; #(Rat+{Error})
16 say $dog.abs-error; #0.5
17
18 #what i want...
19 say (-$dog); #-12.5
20 say (-$dog).WHAT; #(Rat+{Error})
21 say (-$dog).abs-error; #0.5
我的问题的核心是:
  • 作为 $dog I 的用户 可以 在第 14 行获取变量 (12.5) 的值
  • sooo 我怎样才能在第 7 行附近的某个地方获得朴素的值(value)?

  • 我尝试过(拼命地?)一些事情:
  • 对 Real 的强制(仍然得到混合对象)
  • 分配给 Real 容器(允许 Rat+{Error} ~~ Real)
  • $dog.default => 对于“Rat+{Error}”类型的调用者没有这样的方法“默认”

  • 谢谢大家的建议!!

    最佳答案

    所提出问题的直接答案是:不,没有撤消 mixin 的操作。但是,您可以通过一些技巧来实现原始类型的功能:

  • 在方法覆盖的情况下,使用 $obj-with-mixin.OriginalType::method-name()表单调用已被覆盖的方法。
  • multi 的情况下sub(例如运算符),你可以做 &prefix:<->.cando(\(1.5)).head解决,但不调用,- 的实现在 Rat ,然后直接调用。

  • 看着这个问题和你的 previous one但是,您似乎在每一步都在与语言作斗争; is default真的是最后的手段,即使你可以使用 mixin 方法让它工作,你会发现结果非常慢,在很大程度上是因为 mixin 触发了反优化(从专门的和 JIT 编译的代码中掉出来回到口译员)。
    也许使用组合来探索设计:
    # An object holding the value and the error.
    class Error does Real {
    has Real $.value;
    has Real $.abs-error;
    multi method Real(Error:D:) { $!value }
    multi method gist(Error:D:) { "$!value±$!abs-error" }
    }

    # A cute constructor of this type, just for fun.
    multi infix:<±>(Real $value, Real $abs-error) {
    Error.new(:$value, :$abs-error)
    }

    # Negation; no `is default` or other tricks required!
    multi prefix:<->(Error $e --> Error) {
    Error.new(value => -$e.value, abs-error => $e.abs-error)
    }

    # It works!
    my $x = 4.5 ± 0.1;
    say $x;
    say -$x;

    关于mixins - 有没有办法(隐式)删除 Raku 角色混入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69101485/

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