> > How about a DT::Duration::Set class?
> >
> > add() pushes a duration object into a DT::D::Set object
> >
> > _collapse() would call a 'sum' method on a DT::D::Set object
> >
> > _collapse_to_datetime() would call _collapse (or the 'sum' method
> > directly) on a DT::D::Set object and add the resulting DT::D object to a
> > DT object.
>
> And this is easier than "$dt->add( months => 1 )->add( days => -2 )" how?

Well DT::D could create one DT::D object for each parameter in it's constructor.

So DT::D->new( months => 1, days => -2 ) would create a DT::D::Set.

If DT understands these sets then your 'syntax sugar' should work with mixed signs.

$dt->add( months => 1, days => -2 );

The down side is it will be a bit complicated to add/subtract these sets.

Although I think this is pretty cool solution:

use DateTime;
my $dt = DateTime->now;
my $dur = sub { $_[0]->add( months => 3 )->subtract( hours => 3 ) };
print $dur->($dt)->datetime;

-J

--

Reply via email to