问题描述
我试图像这样重载>>运算符:
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