デフォルト値 (default/lazy/builder)

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;

説明

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

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

Last-modified: 2011-06-11 (土) 15:12:08 (2593d)