如何反省Raku运营者?

anq*_*egi 8 function operators raku

我可以反省 Raku 中的例程,例如say 例程:

[5] >  &say.WHAT                                                                                                                                                                   
(Sub)
[6] >  &say.^mro                                                                                                                                                                   
((Sub) (Routine) (Block) (Code) (Any) (Mu))
Run Code Online (Sandbox Code Playgroud)

但我如何自省诸如+doc page)之类的操作符?

[7] >  &+.WHAT                                                                                                                                                                     
Use of uninitialized value of type Callable in numeric context
  in block <unit> at <unknown file> line 1
  in any <main> at /home/toni/.rakubrew/versions/moar-blead/install/share/perl6/runtime/perl6.moarvm line 1
  in any <entry> at /home/toni/.rakubrew/versions/moar-blead/install/share/perl6/runtime/perl6.moarvm line 1

Use of uninitialized value of type Any in numeric context
  in block <unit> at <unknown file> line 1
  in any <main> at /home/toni/.rakubrew/versions/moar-blead/install/share/perl6/runtime/perl6.moarvm line 1
  in any <entry> at /home/toni/.rakubrew/versions/moar-blead/install/share/perl6/runtime/perl6.moarvm line 1

[7] >  &+.mro                                                                                                                                                                      
No such method 'mro' for invocant of type 'Any'
  in block <unit> at <unknown file> line 1
  in any <main> at /home/toni/.rakubrew/versions/moar-blead/install/share/perl6/runtime/perl6.moarvm line 1
  in any <entry> at /home/toni/.rakubrew/versions/moar-blead/install/share/perl6/runtime/perl6.moarvm line 1
Run Code Online (Sandbox Code Playgroud)

由于在 Raku 中,运算符Sub毕竟只是 s,因此很容易声明新的运算符,我认为我做错了什么,但我无法找出到底是什么。

zen*_*nix 9

通过反复试验,我发现:

&infix:<+>.WHAT
Run Code Online (Sandbox Code Playgroud)

这是打印的内容:

(Sub+{is-pure}+{Precedence})
Run Code Online (Sandbox Code Playgroud)

  • 对于中缀,实际上有一个快捷方式:`&amp;[+].WHAT` (6认同)

uzl*_*xxx 5

正如 zentrunix 发现的,您需要 sigil (通常&用来指代对象)和操作符 Category,按以下方式排列:Sub

\n
&cat:<op>\n
Run Code Online (Sandbox Code Playgroud)\n

其中cat是运算符类别(例如,前缀、中缀等),op是运算符。

\n

例如,运算符-有前缀和中缀两种形式:

\n
&cat:<op>\n
Run Code Online (Sandbox Code Playgroud)\n

正如您所见,Raku 中的运算符只是具有愚蠢名称\xc2\xb9 的函数,因此您-也可以按如下方式使用运算符:

\n
say &infix:<->.WHAT;\nsay &prefix:<->.WHAT;\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x9d\xb6 我记得在某处读过此内容,但我不记得它是否在文档中或其他地方。

\n