¿Cómo encuentra un objeto Perl 6 un método múltiple que podría estar en una clase o rol principal?

Considere este ejemplo donde una subclase tiene un método múltiple sin firma y uno con un 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;

¿Cómo se estructura la búsqueda de métodos? Estoy buscando más una forma de explicarlo y específicamente no me quejo de eso.

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

Hay una llamada aBar'sdo-it con1 por ejemplo. Algunas personas razonables podrían pensar que busca una firma coincidente enBar primero y esa lechada nunca dejaría que nada lo pasara. Sin embargo, la llamada encuentra el multi correcto en la cadena de herencia.

HaceBar ya conoces todas las firmas? ¿Busca o todo eso ya está resuelto cuando está compuesto?

Y, ¿hay alguna manera de averiguar en el tiempo de ejecución qué clase proporcionó el método? Tal vez con alguna llamada a CÓMO? Esta sería una herramienta de depuración útil cuando tengo un multi que he especificado incorrectamente y se está manejando en otro lugar.

Respuestas a la pregunta(2)

Su respuesta a la pregunta