如何对Raku中的运算符进行内省操作?
Raku中运算符的内省方法
你遇到的问题是运算符的引用语法错误——Raku里运算符确实是Sub类型,但直接用&+会被语法解析器误解:&是Callable类型的标记,后面的+会被当成对未初始化的Callable进行数值运算,因此抛出错误。
正确的运算符引用方式有两种:
方式一:用引号包裹运算符名
把运算符放在单引号或双引号中,再配合&符号引用:
&"+".WHAT # 输出 (Sub) &'+' .^mro # 输出 ((Sub) (Routine) (Block) (Code) (Any) (Mu))
方式二:明确指定运算符的类型
Raku的运算符分为不同类别(中缀、前缀、后缀等),可以用infix::<>、prefix::<>这样的语法精确引用:
# 内省中缀加法运算符 &infix:<+>.WHAT &infix:<+>.^mro # 如果是前缀正号运算符,要写成: &prefix:<+>.WHAT
这样就能像内省say例程一样,正常查看运算符的类型和方法解析链了。
内容的提问来源于stack exchange,提问作者anquegi
相关产品推荐
相关产品推荐

