gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:41:09 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com