Patrick R. Michaud wrote:
> On Thu, Jun 05, 2008 at 05:29:25PM +0100, Daniel Ruoso wrote:
>> Qui, 2008-06-05 às 11:04 -0500, Patrick R. Michaud escreveu:
>> > Does fall back to a subroutine occur anytime we don't have
>> > a method with a matching signature?  For example, if we have
>> 
>> as far as I understand it, it only falls back to sub-dispach if the
>> method dispatch would otherwise fail, which basically means...
>> 
>> >     class Foo {
>> >         multi method bar(Num $x) { say "Foo::bar"; }
>> >     }
>> >     sub bar(Int $x) { say "sub bar"; }
>> >     my $foo = Foo.new;
>> >     $foo.bar(3);
>> 
>> since Num.ACCEPTS(3) should return true (rakudo is failing that), the
>> method dispatching should be successfull, therefore no fallback occurs.
> 
> Okay, so my bad example didn't provide an answer to my
> original question.  Let's try it this way:
> 
>     class Foo {
>         multi method bar(Dog $x) { say "Foo::bar"; }
>     }
>     sub bar(Int $x) { say "sub bar"; }
> 
>     my $foo = Foo.new;
>     $foo.bar(3);
> 
> In this case, since Foo has a bar method (but not one matching Int), 
> do we still fall back to the subroutine call?  

We can't, because the subroutine call takes the invocant as the first
positional argument. If it should fall back (and I don't know if it
does), you have to declare sub bar(Foo $w, Int $x){ say "sub bar" }

> How about if the method 
> isn't a multimethod (or if the sub is a multisub)? 
> 
> Pm


-- 
Moritz Lenz
http://moritz.faui2k3.org/ |  http://perl-6.de/

Reply via email to