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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...