【发布时间】:2021-11-03 01:31:03
【问题描述】:
如果可以通过does(或but)使重载数学运算符与mixin一起工作,我可以使用一些帮助来避免下面的歧义错误......这个模块:
unit module Physics::Error;
role Error is export {
has Real $.abs-error;
method negate {
...
}
}
multi prefix:<-> ( Error:D $right) is export {
...
}
被这个脚本使用...
use Physics::Error;
my $x = 12.5 does Error(0.5);
my $z = -$x;
对 'prefix:(Rat+{Physics::Error::Error})' 的模糊调用;这些签名都匹配: (大鼠:D \a) (Physics::Error::Error:D $right)
我希望我的自定义运算符始终明确获胜,然后让它实现核心操作和错误计算,然后返回 (Rat+{Physics::Error::Error})。
大局是进行数学运算,同时执行简单的误差计算。
【问题讨论】:
-
也许你的 multi 上的
is default会有所帮助? docs.raku.org/type/Routine#index-entry-is_default_(Routine) -
你还没有说你想对歧义做什么。有一些方法可以解决它(例如,将
is default添加到模块中的前缀-op 声明中,以强制Raku 在出现歧义时始终将模块的op 声明视为默认值)。那是你要的吗?呵呵。嗨,丽兹。折断。 :) -
是的
is default完成了这项工作 --- 谢谢你们(PS OP 已编辑以更清楚地说明目标)