【发布时间】:2021-12-29 22:31:06
【问题描述】:
我在 https://github.com/p6steve/raku-Physics-Measure 中编写了一些代码,用于在每个数学运算中查找 Measure 类型,并将工作交给非标准方法来调整 Unit 和 Error 方面并返回新值:
multi infix:<+> ( Measure:D $left, Real:D $right ) is export {
my $result = $left.clone;
my $argument = $right;
return $result.add-const( $argument );
}
multi infix:<+> ( Real:D $left, Measure:D $right ) is export {
my $result = $right.clone;
my $argument = $left;
return $result.add-const( $argument );
}
multi infix:<+> ( Measure:D $left, Measure:D $right ) is export {
my ( $result, $argument ) = infix-prep( $left, $right );
return $result.add( $argument );
}
这种模式对于 重复了 4 次,所以它相当于相当多的样板文件;我想减少一点。
那么,有没有更简洁的方法来将签名中的单个 Measure|Real 测试应用于两个位置,如果两者或一个但不匹配,则触发多重,并且为不妥协的人保留位置操作 ?
我不确定没有多重是最优雅的 - 也许只是将 Real-Measure 和 Measure-Real 压缩为一个?
【问题讨论】:
-
啊。 .oO(“锤下去”=“基于意见的语言”!)
标签: raku measure units-of-measurement rakudo