Apologies in advance if this is a dumb question but I haven't been able to
figure it out from the examples and my head is now fairly fried from all the
meta poking. It seems a fairly simple thing - so I guess I'm missing
something obvious (I'll happily write the answer up if it isn't already in
the docs somewhere).

I'm trying to create a trait that will provide a default build method if one
hasn't already been set (well it will do more than that, but this is the bit
I'm trying to figure out).

So:

has 'result' => (
  traits => [ 'MyTrait' ],
  is => 'rw',
  isa => 'Str',
);

Would effectively be changed to:

has 'result' => (
  traits => [ 'MyTrait' ],
  is => 'rw',
  isa => 'Str',
  default => sub { "built from default subroutine provide by MyTrait" }
);

But the following would be left alone:

has 'result' => (
  traits => [ 'MyTrait' ],
  is => 'rw',
  isa => 'Str',
  default => sub { "built from custom method" }
);

I can get this to work by getting the trait to provide a custom attribute
(e.g. 'mytrait_build') that effectively does the same job as
build/default/initialize (and just getting the user to specifically override
that), but it seemed neater to try and reuse the existing attributes if
possible.

Many thanks




-- 
Ian Sillitoe
CATH Team -- http://cathdb.info

Reply via email to