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,因此很容易声明新的运算符,我认为我做错了什么,但我无法找出到底是什么。
通过反复试验,我发现:
&infix:<+>.WHAT
Run Code Online (Sandbox Code Playgroud)
这是打印的内容:
(Sub+{is-pure}+{Precedence})
Run Code Online (Sandbox Code Playgroud)
正如 zentrunix 发现的,您需要 sigil (通常&
用来指代对象)和操作符 Category,按以下方式排列:Sub
&cat:<op>\n
Run Code Online (Sandbox Code Playgroud)\n其中cat
是运算符类别(例如,前缀、中缀等),op
是运算符。
例如,运算符-
有前缀和中缀两种形式:
&cat:<op>\n
Run Code Online (Sandbox Code Playgroud)\n正如您所见,Raku 中的运算符只是具有愚蠢名称\xc2\xb9 的函数,因此您-
也可以按如下方式使用运算符:
say &infix:<->.WHAT;\nsay &prefix:<->.WHAT;\n
Run Code Online (Sandbox Code Playgroud)\n\xe2\x9d\xb6 我记得在某处读过此内容,但我不记得它是否在文档中或其他地方。
\n