相关疑难解决方法(0)

Raku mixin 如何与运算符重载配合使用?

does我可以使用一些帮助来确定是否可以通过(或)使重载数学运算符与 mixin 一起使用but,从而避免下面的歧义错误...此模块:

unit module Physics::Error;

role Error is export {
        has Real $.abs-error;
    
        method negate {
            ...
        }
    }
    
    multi prefix:<-> ( Error:D $right) is export {
        ...
    }
Run Code Online (Sandbox Code Playgroud)

像这个脚本一样使用...

use Physics::Error;

my $x = 12.5 does Error(0.5);
my $z = -$x;
Run Code Online (Sandbox Code Playgroud)

对 'prefix:<->(Rat+{Physics::Error::Error})' 的调用不明确;这些签名全部匹配: (Rat:D \a) (Physics::Error::Error:D $right)

我希望我的自定义运算符始终明确获胜,然后让它实现核心操作和错误计算,然后返回 (Rat+{Physics::Error::Error})。

大局是进行数学运算,同时也执行简单的误差计算。

units-of-measurement raku

10
推荐指数
1
解决办法
154
查看次数

尝试分配给字符串+角色时,"无法分配给不可变值"

Iterable doc页面中的示例开始

role DNA does Iterable {
  method iterator(){ self.comb.iterator }
};

my @a does DNA = 'GAATCC';
.say for @a; # OUTPUT: «G?A?A?T?C?C?» 
Run Code Online (Sandbox Code Playgroud)

我发现使用它声明它很奇怪@,因此我将其更改为声明字符串的自然方式$:

my $a does DNA = 'GAATCC';
Run Code Online (Sandbox Code Playgroud)

但是失败了,有些令人困惑的"无法分配给不可变的价值".无需现场指派,所以我们可以这样做:

my $a = 'GAATCC';
$a does DNA;
.say for $a;
Run Code Online (Sandbox Code Playgroud)

这只是为了以后留下混合.但这只是打印字符串,而不关注Iterablemixin.让我们明确地调用它:

.say for $a.iterator;
Run Code Online (Sandbox Code Playgroud)

它确实和以前一样,只是它打印了值$a.iterator,而没有实际调用函数:

<anon|69>.new
Run Code Online (Sandbox Code Playgroud)

这看起来像是在另一个问题中发生的事情.基线问题是我不明白Iterable真正做了什么角色,以及foriterator在什么时候以及何时调用某个对象.任何的想法?

iterator mixins perl6

6
推荐指数
2
解决办法
205
查看次数

标签 统计

iterator ×1

mixins ×1

perl6 ×1

raku ×1

units-of-measurement ×1