list - 允许方法对我的类型列表进行操作?

标签 list methods types raku rakudo

通过在我的类型上实现 [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/

相关文章:

java - 使用 "id"字段更新列表的子部分

Jquery移动: dynamically added list with nested item not opening inner list properly

Bash:范围列表,如 a-b、C、k、m-n、x-y、z

Mathematica 中的结构数据类型?

python - 在 pandas 数据框查询中转换类型的任何方法?

python - 如何根据值从列表中选择实例?

java - 如何退出java方法

C++通过类模板函数中的指针访问类方法

java - Finalize 方法导致性能开销

haskell - GHC 7.8 中类型级别自然的行为