Thank you both! That's very helpful...

...and thanks for the kick in the brain Stevan: your suggestion of using
composition here makes a lot more sense than the solutions I was coming up
with... I think I got lost (refactoring a large ten-year-old legacy app's
multiple parallel data-structures) and kinda 'missed the forest for the
trees' here. :-S

-m

On Tue, Apr 20, 2010 at 6:17 AM, Shlomi Fish <[email protected]> wrote:

> Hi Montgomery,
>
> I don't have a ready answer to your problem, but I'm going to discuss what
> I
> feel is a more general issue, which I've been thinking about it the past
> few
> days.
>
> On Tuesday 20 Apr 2010 04:01:09 Montgomery Conner wrote:
> > Hi All,
> >
> > I've got a question that I didn't see addressed in any of the fine Moose
> > documentation... or maybe I just missed it. At any rate, it seems like a
> > common enough case that I thought others may benefit from my problem...
> >
> > Say I have an attribute that represents a one-to-many relationship
> > implemented as a HashRef of ArrayRef of Str: that is, I have a list of
> > keys, each of which is associated with a corresponding list of tags.
> >
> > I'd like to use the Moose::Meta::Attribute::Native::* trait-methods to
> > simplify these accesses if possible.
> [SNIP]
> >
> > If chaining M::M::A::N handlers isn't natively possible, does anyone have
> a
> > suggestion for a better way to implement the functionality I'm
> describing?
> > Since a Trait is a Role under-the-covers (or so I've read) would I be
> able
> > to simply implement a new Role to handle a "compound-trait", then just
> > declare e.g. "traits => [ 'HashofArray' ]" and implement
> attribute-specific
> > aliases in this attribute to my new Role's methods?
>
> I've been thinking about chaining / function composition in the context of
> Moose (and Perl in general). For example I have an array ref called
> _tags_stack for which I did:
>
> [code]
> handles =>
> {
>        '_get_tag' => 'get',
> },
> [/code]
>
> And then wrote this:
>
> [code]
> sub _top_tag
> {
>        my $self = shift;
>
>        return $self->_get_tag(-1);
> }
> [/code]
>
> And I recall wanting to do a lot of method / value-lists composition /
> chaining with a convenient syntax in the past. Now Haskell has a convenient
> syntax for function composition (I think it's ":", but it may be "$" or
> something else), but it's not very object oriented.
>
> Perhaps we can extend handles to be something like:
>
> [code]
> handles =>
> {
>        '_get_get' => ['get1', 'get2'],
> }
> [/code]
>
> (Syntax may be made better.)
>
> Of course now the million dollar question is whether it should be $self-
> >field->get1->get2 (Law of Demeter anyone?) or $self->field->get1($self-
> >get2()). But it still seems like something to consider.
>
> Regards,
>
>        Shlomi Fish
>
> --
> -----------------------------------------------------------------
> Shlomi Fish       http://www.shlomifish.org/
> Funny Anti-Terrorism Story - http://shlom.in/enemy
>
> Deletionists delete Wikipedia articles that they consider lame.
> Chuck Norris deletes deletionists whom he considers lame.
>
> Please reply to list if it's a mailing list post - http://shlom.in/reply .
>

Reply via email to