无法在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