The only difference between “push” and “say” I can find, is that “push” is 
marked “is nodal”

However, trying to replicate this outside of the setting, does work as expected:

$ 6 'class A { proto method a() is nodal { } }; say A.^can("a")[0] ~~ Callable
True

Looks like it is even deeper, at the nqp level:

$ 6 'use nqp; say nqp::istype(Any.^can("push")[0],Callable)’
0

Not sure where to go from here yet


> On 12 Aug 2016, at 05:32, Zoffix Znet (via RT) <[email protected]> 
> wrote:
> 
> # New Ticket Created by  Zoffix Znet 
> # Please include the string:  [perl #128905]
> # in the subject line of all future correspondence about this issue. 
> # <URL: https://rt.perl.org/Ticket/Display.html?id=128905 >
> 
> 
> To me this looks like a bug, or at least an inconsistency. The failure to do 
> a Callable means it can't be accepted into (&thing) in routines, which is how 
> I discovered this:
> 
> m: say Any.^can("push")[0] ~~ Callable;
> rakudo-moar c587b9: OUTPUT«False␤»
> 
> m: say Any.^can("push")[0].^mro
> rakudo-moar c587b9: OUTPUT«((Method+{<anon|42801984>}) (Method) (Routine) 
> (Block) (Code) (Any) (Mu))␤»
> 
> m: say Any.^can("say")[0].^mro
> rakudo-moar c587b9: OUTPUT«((Method) (Routine) (Block) (Code) (Any) (Mu))␤»
> 
> m: sub (&thing) {}( Any.^can("push")[0] )
> rakudo-moar c587b9: OUTPUT«Type check failed in binding to &thing; expected 
> Callable but got Method+{<anon|42801984>} (Method+{<anon|4280198...)␤  in sub 
>  at <tmp> line 1␤  in block <unit> at <tmp> line 1␤␤»
> 
> m: sub (&thing) {}( Any.^can("say")[0] )
> rakudo-moar c587b9: ( no output )
> 
> 

Reply via email to