Class::Accessor::Fast - アクセサを簡単に作成する
Class::Accessor::Fastはアクセサを簡単に作成するためのモジュールです。アクセサとはオブジェクトの属性にアクセスするためのメソッドのことです。
mk_accessorsメソッドを使用してアクセサを生成することができます。Class::Accessor::Fastを継承してパッケージ名からmk_accesors()を呼び出します。
# アクセサの生成 package YourClass; use base 'Class::Accessor::Fast'; __PACKAGE__->mk_accessors($meth1, $meth2, ...);
一般的なクラスのサンプルです。Pointクラスはx()とy()というアクセサを持ちます。Class::Accessor::Fastのnew()はハッシュのリファレンスしか受け取ることしかできないので、ハッシュとハッシュのリファレンスを受け取ることができるようにオーバーライドするのが良いと思います。
package Point; use strict; use warnings; use base 'Class::Accessor::Fast'; # アクセサ __PACKAGE__->mk_accessors(qw/x y/); # コンストラクタ sub new { my $class = shift; # 属性 my $args = ref $_[0] eq 'HASH' ? $_[0] : {@_}; # new()のオーバーライド return $class->SUPER::new({ x => 0, y => 0, %$args }); }
このクラスは次のように使用します。
my $point = Point->new(x => 1, y => 2); $point->x(4); $point->y(5);
Class::Accessor::Fastに関するFAQ
Q. コンストラクタの引数にハッシュリファレンスではなくハッシュを渡したり、アクセサのデフォルト値を設定したいです。
A. Object::Simpleモジュールでそれらの機能が提供されています。Object::Simpleではコンストラクタにハッシュを渡したり、アクセサのデフォルト値を指定することができます。Class::Accessor::Fastで行いたい場合はサンプルのようにnewをオーバーライドすることで可能になります。