名前¶
Class::Data::Inheritable - 継承可能な, オーバーライド可能な、クラスデータ
概要¶
package Stuff;
use base qw(Class::Data::Inheritable);
# DataFileを、継承可能なクラスデータとしてセットアップする。
Stuff->mk_classdata('DataFile');
# このクラスためにデータファイルの場所を宣言する。
Stuff->DataFile('/etc/stuff/data');
概要¶
Class::Data::Inheritable は、クラスデータのアクセサ/ミューテータを作るのに向いています。 つまり、(単一のオブジェクトとは違って、)クラス全体に何かを蓄えたい場合です。 このデータは、サブクラスで継承され得ますし、オーバーライドされ得ます。
例:
Pere::Ubu->mk_classdata('Suitcase');
これは、Suitcate メソッドを、Pere::Ubu クラスに生成します。
新しいメソッドは、クラスデータの一つを得たり、セットするのに、使われ得ます。
Pere::Ubu->Suitcase('Red');
$suitcase = Pere::Ubu->Suitcase;
面白い部分が、クラスが Pere::Ubu から継承するときに起こります:
package Raygun;
use base qw(Pere::Ubu);
# Raygunのスーツケースは Red.
$suitcase = Raygun->Suitcase;
Raygun は、Pere::Ubuからスーツケースクラスデータ継承します。
クラスデータの継承は、メソッド継承にanalgousを動かします。 Raygunが、継承されたクラスデータを(Suitcase()を使って、新しい値をセットすることによって)"オーバーライド"しないかぎり、 Pere::Ubu で、セットされたものをなんでも使い続け、以前の変更を継承し続けます。
# Raygun と Pere::Ubu の suitcases は、今は Blue です。
Pere::Ubu->Suitcase('Blue');
しかし、Raygun が、自分自身のSuitcase() をセットするべきだと決めると、 Suitcase() は、 今や、Pare::Ubu を"オーバーライド"しており、Raygun 自身のものです。 オーバーライドされたメソッドにちょうど、似ています。
# Raygun は orange のスーツケースを持つが、Pere::Ubu のスーツケースは、まだ Blue です.
Raygun->Suitcase('Orange');
さて、Raygun は、Pare::Ubu をオーバーライドしたので、Pare::Ubu による、以前の変更は まったく Raygun には、影響を与えません。
# Raygun は、まだ、orange のスーツケースですが、 Pere::Ubu は、Samsonite を使います。
Pere::Ubu->Suitcase('Samsonite');
メソッド¶
- mk_classdata
-
Class->mk_classdata($data_accessor_name);
これはクラスメソッドで、新しいクラスデータのアクセサを宣言するのに使われます。 $data_accessor_name を名前に使って、新しいアクセサがクラス内に作られます。
オーバーライドを容易にするために、mk_classdata は、アクセサへのエイリアス _field_accessor() を作ります。 それで、Suitcase() には、_Suitcase_accessor() というエイリアスがあり、 このエイリアスは、Suitcase() と、ちょうど同じことをします。 単一のアクセサの振る舞いを変えようとして、 まだ、継承可能なクラスデータの恩恵を得たいなら、有益です。次の例のように。
sub Suitcase { my($self) = shift; warn "Fashion tragedy" if @_ and $_[0] eq 'Plaid'; $self->_Suitcase_accessor(@_); }
原文まま¶
Copyright (c) 2000, Damian Conway and Michael G Schwern. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the terms of the Perl Artistic License (see http://www.perl.com/perl/misc/Artistic.html)
原文まま¶
Original code by Damian Conway.
Maintained by Michael G Schwern <schwern@pobox.com>
SEE ALSO¶
perltootc は、とても入念なPerlのクラスデータについての議論があります。
翻訳について¶
翻訳者:加藤敦 (ktat.is@gmail.com)
Perlドキュメント日本語訳 Project にて、 Perlモジュール、ドキュメントの翻訳を行っております。
http://sourceforge.jp/projects/perldocjp/
http://www.freeml.com/ctrl/html/MLInfoForm/perldocjp@freeml.com
http://www.perldoc.jp