【发布时间】:2023-03-28 22:22:01
【问题描述】:
我定义了一个multi sub,它有两个签名:
multi sub mie(Str $s, Int $i) { $s x $i }
multi sub mie(Int $s, Int $i) { ... }
say &mie.signature; # ;; Mu | is raw)
我想得到这个multi sub的签名,但是上面的结果不是我所期望的。
正如文档所说,contains 是一个多重方法,有 4 个签名:
multi method contains(Str:D: Cool:D $needle)
multi method contains(Str:D: Str:D $needle)
multi method contains(Str:D: Cool:D $needle, Int(Cool:D) $pos)
multi method contains(Str:D: Str:D $needle, Int:D $pos)
但是当我尝试获取contains的签名时:
say "a string".^methods.pairs.values[8].value.signature;
它只输出一个签名:
(Str: | is raw)
在 REPL 中,当我不带参数调用 contains 方法时,它会输出以下错误:
> "a string".contains()
Cannot resolve caller contains(Str: ); none of these signatures match:
(Str:D: Cool:D $needle, *%_)
(Str:D: Str:D $needle, *%_)
(Str:D: Cool:D $needle, Cool:D $pos, *%_)
(Str:D: Str:D $needle, Int:D $pos, *%_)
in block <unit> at <unknown file> line 1
这表明contains 方法确实有4 个签名!我想知道有没有方法可以输出一个方法/多方法的所有signature?
【问题讨论】:
标签: raku