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

Reply via email to