cow*_*moo 9 overloading operator-keyword 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';
Run Code Online (Sandbox Code Playgroud)
但是我在第 5 行收到一个编译错误,内容是:
Unsupported use of >> to do right shift. In Raku please use: +> or ~>.
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
这是 Rakudo 的编译器(有点)太聪明了,不利于自身利益的一个例子。因为乐堂有不同类型的移位操作,而且都没有使用双箭头,所以乐堂使用的语法已经>>设置为对习惯其他语言的人触发警报。我猜当时没有人想到有人会创建一个>>有意义的运算符,因为>>或多或少暗示可能存在 a <<,如果将其用作引号外加符和元运算符,则可能会造成各种破坏。
您可以在此处查看语法代码:https : //github.com/rakudo/rakudo/blob/9d6d8dd7a72aed698e30b6fe4b8eea62642c62c6/src/Perl6/Grammar.nqp#L4104