* デフォルト値 - default/lazy/builder[#t730f6a4]
* デフォルト値 (default/lazy/builder)[#t730f6a4]

 package User;
 use Mouse;
 use Time::Piece;
 has sei        => ( is => 'rw', isa => 'Str',         default => 'yamada' );
 has mei        => ( is => 'rw', isa => 'Str',         default => 'taro' );
 has birth_date => ( is => 'rw', isa => 'Time::Piece', default => sub { Time::Piece->localtime() } );
 has name       => ( is => 'rw', isa => 'Str',         lazy    => 1, builder => 'build_name' );
 
 sub build_name {
    my $self = shift;
    return $self->sei . ' ' . $self->mei;
 }
 __PACKAGE__->meta->make_immutable();
 
 package main;
 my $user = User->new();
 say $user->name;
 say $user->birth_date->ymd;

** 説明 [#z438e0ff]
- default でデフォルト値を設定する。値もしくはコードリファレンスを設定出来る。
- default の代わりに、lazy と builder を設定すると、そのアトリビュートが実際に使用されるまで、デフォルト値の設定を遅らせる事が出来る。
- ここでは name はインスタンス生成時では設定されず、say $user->name の際に、build_name() が実行される。
- lazy/builder を設定する代わりに、以下のように lazy_build => 1 のように設定しても良い。その場合、builderの関数名は _build_name に固定される。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS