gpt4 book ai didi

raku - 如何获得多子或内置的所有签名?

转载 作者:行者123 更新时间:2023-12-04 00:41:07 26 4
gpt4 key购买 nike

我定义了一个 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一种方法/多种方法?

最佳答案

试试 "a string".^lookup('contains').candidates».signature.^lookup('contains')会找到 Method
.candidates将列出多 candidates
.signature会给你 Signature 每一个人。

输出:
((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, *%_))

您可以将它用于您的 multi sub也:
say &mie.candidates».signature;

关于raku - 如何获得多子或内置的所有签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52515445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com