Como um objeto Perl 6 encontra um método múltiplo que pode estar em uma classe ou função pai?

Considere este exemplo em que uma subclasse possui um método múltiplo sem assinatura e outro com um parâmetro slurpy:

class Foo {
    multi method do-it { put "Default" }
    multi method do-it ( Int $n ) { put "Int method" }
    multi method do-it ( Str $s ) { put "Str method" }
    multi method do-it ( Rat $r ) { put "Rat method" }
    }

class Bar is Foo {
    multi method do-it { put "Bar method" }
    multi method do-it (*@a) { put "Bar slurpy method" }
    }

Foo.new.do-it: 1;
Foo.new.do-it: 'Perl 6';
Foo.new.do-it: <1/137>;
Foo.new.do-it;

put '-' x 10;

Bar.new.do-it: 1;
Bar.new.do-it: 'Perl 6';
Bar.new.do-it: <1/137>;
Bar.new.do-it: 5+3i;
Bar.new.do-it;

Como a pesquisa de método está estruturada? Estou procurando mais uma maneira de explicar isso e, especificamente, não reclamando.

Int method
Str method
Rat method
Default
----------
Int method
Str method
Rat method
Bar slurpy method
Bar method

Há uma chamada paraBarédo-it com1 por exemplo. Algumas pessoas razoáveis podem pensar que procura uma assinatura correspondente emBar primeiro, e esse slurpy nunca deixaria nada passar por isso. No entanto, a ligação encontra o número certo na cadeia de herança.

FazBar já conhece todas as assinaturas? Ele pesquisa ou todas essas coisas já foram resolvidas quando compostas?

E, existe uma maneira de descobrir em tempo de execução qual classe forneceu o método? Talvez com alguma ligação para COMO? Essa seria uma ferramenta útil de depuração quando eu tiver um número múltiplo especificado incorretamente e estiver sendo tratado em outro lugar.

questionAnswers(2)

yourAnswerToTheQuestion