Class::Accessor::Lite - Class::Accessorの最小機能版
package MyPackage;
use Class::Accessor::Lite (
new => 1,
rw => [ qw(foo bar) ],
ro => [ qw(baz) ],
wo => [ qw(hoge) ],
);
このモジュールは Class::Accessorの亜種です. 高速でタイプ数が少なく済み, 他のモジュールの依存もなく, @ISAを汚すこともありません.
モジュールの use文(すなわち import
関数)はプロパティの種類と名前を示すハッシュを一つ受け取ります. 以下に示すキーを認識します.
- new => $true_or_false
-
この値が真であるとき, デフォルトコンストラクタが作成され, その他の場合は何も作成されません(デフォルト動作)
- rw => \@name_of_the_properties
-
配列リファレンスとして渡されたプロパティの名前の読み取り/書き込みアクセサを作成します.
- ro => \@name_of_the_properties
-
配列リファレンスとして渡されたプロパティの名前の読み取りのみのアクセサを作成します.
- wo => \@name_of_the_properties
-
配列リファレンスとして渡されたプロパティの名前の書き込みのみのアクセサを作成します.
実際にアクセサを作るそれぞれの関数の振る舞いについて述べた以下のセクションにより詳細な説明があります.
バージョン 0.04では, プロパティは use
文の引数として指定することができます(SYNOPSISで見れます), これは現在は推奨される方法です. ただし互換性のために以下の関数も同様に提供されます.
カレントパッケージ下に引数で指定された名前のアクセサを作成します. アクセサは同じ名前の(ハッシュリファレンスの)プロパティにアクセスします.
読み出しのみのアクセサを生成することを除き, mk_accessors()と同じです(すなわち純粋なアクセサ). もし生成されたアクセサを用いて値の設定を行なった場合, 例外が投げられます.
書き込みのみのアクセサを生成することを除き, mk_accessors()と同じです(すなわち書き換え可能). もし生成されたアクセサを用いて値を読みだそうとすると, 例外が投げられます.
オブジェクトのプロパティを初期化する new
関数を作成します. new関数は引数としてハッシュもしくはハッシュリファレンス受け取ります.
DEPRECATED. Use the new "use Class::Accessor::Lite (...)" style. 廃止予定. new "use Class::Accessor::Lite (...)"スタイルの使用.
スーパークラスがハッシュリファレンスを使って実装されているのであれば, 多くの場合は可能です. しかし継承したクラスのコンストラクタを Class::Accessor::Lite-
new()>もしくは use Class::Accessor::Lite (new =
1)を使って作成するべきではありません. Class::Accessor::Lite
が与えられた名前について blessされたハッシュリファレンスにアクセスするための, アクセサをセットアップするだけにすべきです.
Class::Accessor::Liteに作成されたアクセサに一つより多い引数が渡されたとき, 引数のリファレンスが配列リファレンスとして格納されます. この振る舞いは必要ではないと考えられますが, Class::Accessor::Fastとの互換性を維持するために実装しています.
my @data = (1, 2, 3);
$obj->someproperty(@data);
$obj->someproperty->[2]++; # $data[3]がインクリメントされてしまいます.
一般的に, プロパティに配列リファレンスをセットするために, 配列リファレンスを渡すべきです.
my @data = (1, 2, 3);
$obj->someproperty([ @data ]); # 使用する配列リファレンスのコピーが格納されます.
$obj->someproper->[2]++; # @dataは変更されません.
Copyright (C) 2008 - 2010 Kazuho Oku
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.6 or, at your option, any later version of Perl 5 you may have available.