Hi Moritz, Couldn't this be achieved by custom made metaclass?
I was trying to adapt examples from advent calendar and S12 and I lost :( because my metaclass is not used by perl https://gist.github.com/teodozjan/b7183c81c966cfeee3bd#file-incomplete-pl On Mon, May 19, 2014 at 10:36 PM, Moritz Lenz <mor...@faui2k3.org> wrote: > Hi Kamil, > > the good news is that I understand what causes the problem. The bad news > is that it I don't have a solution yet. > > The trouble is that you can't really call methods on roles; roles are > rather abstract things, and if you try to call a method on a role, Perl > 6 automatically creates a class for you, with the same name as the role. > We call this process "punning". > > Calling R.^can($methodname) causes punning, and the punned class doesn't > implement the stubbed method. Thus the error message. > > Knowing that, one could just inspect the role's method table instead of > calling .^can. However that's not so easy, because roles come in groups. > Roles can be parametric, and multiple roles of the same name can be > parameterized by different signatures, and applying a role to a class > (possibly with a list of arguments) selects a candidate role, not just a > single role candidate. > > So far I haven't seen any method in the ParametricRoleGroupHOW that > gives me a list of those candidates, or a of methods. So I don't know > how to emulate .^can. > > I'll see if anybody in #perl6 (IRC) has a good idea... > > Cheers, > Moritz > > On 19.05.2014 14:52, Kamil Kułaga wrote: >> Hi Moritz, >> >> I've tried to adapt Your gist to something else but I've realized that >> it does not work with stubs. Is it possible to bypass problem with >> incomplete R? >> >> https://gist.github.com/teodozjan/b7183c81c966cfeee3bd >> >> I feel very inspired :) >> >> On Fri, May 16, 2014 at 10:44 AM, Moritz Lenz <mor...@faui2k3.org> wrote: >>> Hi Kamil, >>> >>> >>> On 05/15/2014 07:48 PM, Kamil Kułaga wrote: >>>> >>>> Is there any ordinary way (not something like getting list of methods >>>> from base class) to ensure we are overriding method? >>>> >>>> Java has @Override annotation that that causes compilation error if >>>> method is not necessary for Interface(Role). It is very handy if class >>>> does many of them and someone cuts out deprecated method and there is >>>> no reason to implement them any longer. >>> >>> >>> Not by default, but the meta programming facilities make it just a small >>> exercise to implement such a thing in user space. >>> >>> I've done that in >>> https://gist.github.com/moritz/2c6ed01eef0029dabdeb >>> >>> Feel inspired :-) >>> >>> Cheers, >>> Moritz >> >> >> -- Pozdrawiam Kamil Kułaga