Re: Trying to create an attribute trait that prompts for a value if none specified

[email protected] (Buddy Burden)
Newsgroups perl.moose
Message-ID <CAL0mxoTSDRO=g3ey9sW-VB+Hz21Te3H_xOaeYoiThm9-6kCh5A@mail.gmail.com>
Todd,

> Not quite... We're not changing the default metaclass for everything, but
> rather applying a metarole to the metaclass of the consuming class. (I think
> that's how it goes -- I'm still not sure of the correct terminology.)

Yes, true, but my thinking goes (and I freely admit I could be wrong
on the details) that, by applying a metarole to the metaclass, that
generates an anonymous class which composes the role.  So it is, in
effect, a new metaclass, not technically for everything, but for
everything from that point forward (till end of file or end of scope).

> (If you're
> concerned about prompting during cloning and/or reblessing, there'll be a
> little more work to do.)

Perhaps, although at that point there would be a value from the
original instantiation, so as long as I only prompt when there's no
value, I should be good.

> Don't know if it's a good approach by Moose Cabal
> standards, but it's direct.

True. :-)  LIS, I'm just wondering what people think about the two
approaches: creating an attribute trait vs applying a metarole to the
metaclass.  Is one better than the other in certain respects?  Is one
academically/philosophically better (an interesting point, although
mostly moot)?  What about practical aspects?  Does one work in
scenario X where the other doesn't?  That sort of thing.


Back to ealleniii's solution, I managed to track down the
add_attribute() method of the metaclass (it's in
Class::MOP::Mixin::HasAttributes; not sure why I couldn't find that on
CPAN) and I see it is indeed smart enough to remove the old attribute
of the same name before adding the new one.  I'm still a little fuzzy
on whether the memory would get freed, but I'm assuming so.  So I'm
going to play around with this one a bit more.


            -- Buddy
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.