Skip to content

Latest commit

 

History

History
199 lines (105 loc) · 8.5 KB

File metadata and controls

199 lines (105 loc) · 8.5 KB

NAME

Class::Accessor::Lite - Class::Accessorの最小機能版

SYNOPSIS

package MyPackage;

use Class::Accessor::Lite (
    new => 1,
    rw  => [ qw(foo bar) ],
    ro  => [ qw(baz) ],
    wo  => [ qw(hoge) ],
);

DESCRIPTION

このモジュールは Class::Accessorの亜種です. 高速でタイプ数が少なく済み, 他のモジュールの依存もなく, @ISAを汚すこともありません.

THE USE STATEMENT

モジュールの use文(すなわち import関数)はプロパティの種類と名前を示すハッシュを一つ受け取ります. 以下に示すキーを認識します.

new => $true_or_false

この値が真であるとき, デフォルトコンストラクタが作成され, その他の場合は何も作成されません(デフォルト動作)

rw => \@name_of_the_properties

配列リファレンスとして渡されたプロパティの名前の読み取り/書き込みアクセサを作成します.

ro => \@name_of_the_properties

配列リファレンスとして渡されたプロパティの名前の読み取りのみのアクセサを作成します.

wo => \@name_of_the_properties

配列リファレンスとして渡されたプロパティの名前の書き込みのみのアクセサを作成します.

実際にアクセサを作るそれぞれの関数の振る舞いについて述べた以下のセクションにより詳細な説明があります.

FUNCTIONS

バージョン 0.04では, プロパティは use文の引数として指定することができます(SYNOPSISで見れます), これは現在は推奨される方法です. ただし互換性のために以下の関数も同様に提供されます.

Class::Accessor::Lite->mk_accessors(@name_of_the_properties)

カレントパッケージ下に引数で指定された名前のアクセサを作成します. アクセサは同じ名前の(ハッシュリファレンスの)プロパティにアクセスします.

Class::Accessor::Lite->mk_ro_accessors(@name_of_the_properties)

読み出しのみのアクセサを生成することを除き, mk_accessors()と同じです(すなわち純粋なアクセサ). もし生成されたアクセサを用いて値の設定を行なった場合, 例外が投げられます.

Class::Accessor::Lite->mk_wo_accessors(@name_of_the_properties)

書き込みのみのアクセサを生成することを除き, mk_accessors()と同じです(すなわち書き換え可能). もし生成されたアクセサを用いて値を読みだそうとすると, 例外が投げられます.

Class::Accessor::Lite->mk_new()

オブジェクトのプロパティを初期化する new関数を作成します. new関数は引数としてハッシュもしくはハッシュリファレンス受け取ります.

Class::Accessor::Lite->mk_new_and_accessors(@name_of_the_properties)

DEPRECATED. Use the new "use Class::Accessor::Lite (...)" style. 廃止予定. new "use Class::Accessor::Lite (...)"スタイルの使用.

FAQ

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は変更されません.

SEE ALSO

Class::Accessor

Class::Accessor::Lite

AUTHORS

Copyright (C) 2008 - 2010 Kazuho Oku

LICENSE

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.