Re: Import x from package
[email protected] ("Christopher Brown")
| Newsgroups | perl.moose |
|---|---|
| Message-ID | <[email protected]> |
Stevan, Thanks for the reply. I was thinking more of roles, but now I see why this would be very bad for classes. I will take a look at the test. I think that it is probably exactly what I was thinking. Best, Chris On Mon, Mar 31, 2008 at 2:27 PM, Stevan Little < [email protected]> wrote: > Christopher, > > For roles, there is currently no easy way to exclude attributes or their > generated accessors, only true methods (generated accessors don't count > because they are not created at the time when the role is consumed). It is a > new feature, so there is not many docs on this yet, but there are some tests > for it, look here http:// > search.cpan.org/src/STEVAN/Moose-0.40/t/030_roles/012_method_exclusion_in_composition.t > for some examples. > > For classes, you don't want to do this, it is just plain bad OO practices. > And to be honest, if you find that you are having this issues with Roles > too, you probably want to break up your role into 2 smaller roles. Another > programmer would expect that if you consumed RoleX or subclassed ClassX and > those both had method foo_bar, that foo_bar would be there, by removing it > you are setting yourself and others up for issues. > > - Stevan > > > On Mar 31, 2008, at 4:00 PM, Christopher Brown wrote: > > > Stevan, > > > > I hope you and the rest of the Moose list is not getting sick of me. I > > am having a much fun with Moose and hope that I am contributing a smidge to > > your efforts by kicking the tires and reporting my troubles. > > > > Here is something I got stuck on recently: > > > > Is there a way to import only one or several, but not all > > atribute/method/symbol from a Moose role or class. Sorta like the import > > tags if you are using Exporter -or- like Python's import x from y. Say I > > want to extend a class but don't want all of it's methods. What is the > > Moose way? I can, of course, undef unwanted symbols, like so: > > > > use feature 'say'; > > package Parent; > > use Moose; # awesome! > > > > has 'attrib_1' => ( is => 'rw', isa=> 'Str', default => 'one' ); > > has 'attrib_2' => ( is => 'rw', isa=> 'Str', default => 'two' ); > > > > package Child; > > use Moose; # Even better! > > extends 'Parent'; > > > > undef &attrib_1; > > > > package main; > > > > my $child = Child->new; > > say $child->attrib_2; > > say $child->attrib_1; > > > > > > But there seems like there should be a better way. > > > > Any thoughts on this one. ( Like all Moose things, I am sure it is > > simple and straight-forward. ) > > > > Thanks in Advance, > > > > Chris > > > > >