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 )
>
>