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)
In reply to Moose: apply Role at Runtime (build vs. default) [solved] by Brutha
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |