不能在 Raku 中重载 >> 运算符

Can't overload the >> operator in Raku

我正在尝试像这样重载 >> 运算符:

class A {}

multi sub infix:«>>»(A:D $a, Str() $b) is assoc<non> { dd $a; dd $b }
my $x = A.new;
$x >> 'output.txt';

但是我在第 5 行收到一个编译错误:

Unsupported use of >> to do right shift.  In Raku please use: +> or ~>.

我错过了什么?

这是 Rakudo 的编译器(有点)过于聪明而不利于自身的一个例子。因为 Raku 中有不同类型的移位操作并且都不使用双箭头,所以 Rakudo 使用的语法设置了 >> 以触发习惯其他语言的人的警报。我想当时没有人认为有人会做出一个有意义的 >> 运算符,因为 >> 或多或少意味着可能会有一个 <<,这可能会造成各种破坏它用作引号环缀和元运算符。

您可以在此处查看代码语法: https://github.com/rakudo/rakudo/blob/9d6d8dd7a72aed698e30b6fe4b8eea62642c62c6/src/Perl6/Grammar.nqp#L4104