Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

How do you create attribute handlers for methods of an object (via Moose) ?

by nodebunny (Novice)
on Sep 26, 2011 at 18:55 UTC ( #927927=perlquestion: print w/ replies, xml ) Need Help??
nodebunny has asked for the wisdom of the Perl Monks concerning the following question:

I think I've got attribute handlers down for perl Natives!
package tree; has '_branches' => ( traits => ['Hash'], is => 'rw', isa => 'HashRef[Any]', handles => { _set_branch => 'set', _is_branch => 'defined', _list_branches => 'keys', _branch => 'get' }, trigger => sub { my($self,$hash) = @_; $self->_build_branch($hash); } ); sub _build_branch{ my($self,$hash); # do stuff! #return altered or coerced hash return $hash; }
What do you think? But let's say for example I have a LinkedList object with the following methods
LinkedList{} LinkedList.append() LinkedList.insert() LinkedList.size() LinkedList.has_children() LinkedList.remove() LinkedList.split()
Is there a way handle the object's methods via Moose Attributes (without using MooseX) - similar to this?
package Bucket; has '_linkedlist' => ( traits => ['LinkedList'], is => 'rw', isa => 'LinkedListRef[Any]', handles => { _add_link => 'append', _insert_link => 'insert', _count_links => 'size', _del_link => 'remove', _split_at_link => 'split', _has_sublinks => 'has_children', } };
It would be great if there was a way to do this, but I'm concerned maybe I've misunderstood something somewhere about how or why to create handlers for non-native attributes. Your wisdom is appreciated!

Comment on How do you create attribute handlers for methods of an object (via Moose) ?
Select or Download Code
Re: How do you create attribute handlers for methods of an object (via Moose) ?
by ikegami (Pope) on Sep 26, 2011 at 19:17 UTC

    This question was also posed on StackOverflow, where I answered the following.


    Are you simply overcomplicating things, or am I missing something?

    package Bucket; has '_linkedlist' => ( is => 'rw', isa => 'LinkedList', handles => { _add_link => 'append', _insert_link => 'insert', _count_links => 'size', _del_link => 'remove', _split_at_link => 'split', _has_sublinks => 'has_children', }, );

    Hashes don't have methods, which is why a trait is involves. The trait adds the methods. Your LinkedList class has methods, so no need to write a trait to provide the methods.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://927927]
Approved by ikegami
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (6)
As of 2014-10-20 04:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (72 votes), past polls