通过在我的类型上实现 [multi?|sub?] 方法,Raku 使得在我的新类型上支持现有功能变得非常容易。但是,我想知道它是否还提供了一种方法,将现有(或新)方法应用于我的类型的列表或其他位置集合(不增加列表,这是通往疯狂之路的第一步......)。
更具体地说,这就是我所说的,使用 Point
类似乎是每个人的此类事情的首选示例:
class Point {
has $.x; has $.y;
method sum(Point $p) { Point.new: :x($!x + $p.x) :y($!y + $p.y) }
}
my $p1 = Point.new: :8x :3y;
my $p2 = Point.new: :1x :9y;
$p1.sum: $p2; # this works # OUTPUT: «Point.new(x => 9, y => 12)»
($p1, $p2).sum; # This is what I want to be able to do
(我知道,在 .sum
的特定情况下,有一个解决方案涉及在 Numeric
上实现 Point
强制方法,但我对更通用的解决方案感兴趣。)有没有好的/干净的方法来做到这一点?或者我只是使用减少和类似的功能来总结列表中的点而不能使用
.sum
该列表上的方法?
最佳答案
您可以添加专用 infix:<+>
候选人,然后你可以使用 [+]
元:
multi sub infix:<+>(Point:D \a, Point:D \b) {
a.sum(b)
}
say [+] $p1,$p2; # Point.new(x => 9, y => 12)
List.sum
方法 使用 infix:<+>
在内部,但遗憾的是它首先尝试调用 Numeric
在上面。这可以被视为一个错误:将调查。
关于list - 允许方法对我的类型列表进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66925670/