2012-05-14 2 views
1

Moosedocumentation говорит, что я могу делегировать объекту thing достаточно легко.Как я могу делегировать субобъект объекта с помощью ручек Moose?

has 'thing' => (
    ... 
    handles => { set_foo => [ set => 'foo' ] }, 
); 

# $self->set_foo(...) calls $self->thing->set('foo', ...) 

Но я действительно хочу, чтобы делегировать объект на вещи, в частности, объект DateTime

has 'thing' => (
    ... 
    handles => { 
     get_month => { datetime ... }, 
    }, 
); 

# $self->get_month calls $self->thing->datetime->month; 

как бы я должен построить ручки, чтобы заставить его сделать это?

ответ

3
has thing => (
    ... 
    handles => { 
     get_month => sub { $_[0]->thing->datetime->month }, 
    }, 
); 

Короткие добавления datetime_month к thing, вам придется написать свой собственный доверителя.

+1

На этом этапе вы уже пишете метод самостоятельно и можете также отбросить декларацию 'handles' и просто написать' sub get_month' вручную. – rafl

+0

@rafl, Вы могли бы это сделать, но я не согласен с тем, что лучше его переместить. В частности, запись его в качестве делегата передает читателю информацию о том, что вы не получите иначе. – ikegami

+0

У меня также есть другие ручки на том же объекте, который не требовал такого уровня глубины ... так что это все равно ставит их всех в одно и то же место. – xenoterracide

Смежные вопросы