Brutha has asked for the wisdom of the Perl Monks concerning the following question:
Hello fellow monks,
after working through Moose Best Practices and various discussions, I decided to use build instead of default for my attributes. So far so good.
Now I have a role with lazy attributes that I apply at runtime with Moose::Util qw(apply_all_roles). This also works fine. With one exception. I get the message "You cannot have a lazy attribute (myattr) without specifying a default value for it". Calling the _build function from default works.
From Perl common sense I would say, the object is already built before the Role is applied. So you have to use default values for initialization. And so I do something like:
has 'myattr' => ( is => 'ro', isa => 'Int', lazy => 1, default => \&_build_myattr, # build => '_build_myattr', );
Did I miss something?
What are best practises in my case?
Thank you for your thoughts
Update: see comment below, it's a typo. It is a "builder" instead of "build"
And it came to pass that in time the Great God Om spake unto Brutha, the Chosen One: "Psst!"
(Terry Pratchett, Small Gods)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Moose: apply Role at Runtime (build vs. default)
by tobyink (Canon) on Apr 02, 2013 at 16:13 UTC | |
by Brutha (Friar) on Apr 04, 2013 at 14:16 UTC | |
|
Re: Moose: apply Role at Runtime (build vs. default)
by Brutha (Friar) on Apr 08, 2013 at 12:49 UTC |