# New Ticket Created by  Edwin Steiner 
# Please include the string:  [perl #115212]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=115212 >


When a role requires a method to be implented, rakudo does not consider 
accessor methods that implement the required method.

Also the error message is LTA as it would be nice to know *which* role requires 
the method.



Example:


$ cat t2.pl 
role Wanter {
    method foo { ... }
    method bar { self.foo + 1 }
}

class Giver does Wanter {
    has $.foo;
    # This line should not be necessary: method foo { $!foo }
}

say Giver.new(:foo(41)).bar;

$ ./perl6 t2.pl 
===SORRY!===
Method 'foo' must be implemented by Giver because it is required by a role


$ ./perl6 --version
This is perl6 version 2012.09.1-7-gfb11f13 built on parrot 4.4.0 revision 
RELEASE_4_4_0


IRC log about this topic:
http://irclog.perlgeek.de/perl6/2012-10-09#i_6047393

20:52   _edwin  when I change to "role FPS" I get an error that ExplicitFPS 
does not implement the method coeffs
20:53           it seems the implicit accessor method does not count towards 
the role
20:53   colomon _edwin: you can easily explicitly define it, obviously, but I 
am surprised, I admit.
20:53   _edwin  is it a bug or a feature? :}
20:53   jnthn   Well, things at composition time have to happen in some order.
20:54   colomon _edwin: I think you need jnthn for that question.  :)
20:54   jnthn   At the moment roles are composed *then* we compose attributes.
20:55           iirc, it has to be that way because roles can contribute 
attributes that need accessors generating too
20:55           Is the issue that the role has a required method?
20:55   _edwin  yes
20:55   jnthn   Yeah...
20:55           I don't think we can fix that by swapping around the order 
compose does things.
20:55           But I agree it's icky
20:56   _edwin  and the derived class just "has @.coeffs" and not "method 
coeffs { @.coeffs }"
20:56   jnthn   Yeah
20:56           I suspect it's possible for the role applier to give back a 
list of things that are required
20:56           But not complain about them immediately
20:56           And then we check if they're there later

20:58   jnthn   _edwin: I think you want method coeffs { @!coeffs }
20:58           _edwin: I think the requirement/accessor thing should really be 
fixed. Please file a ticket.

Reply via email to