不能在 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
我正在尝试像这样重载 >> 运算符:
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