プログラミングPerl 12章を読んでミタ。。
すごくすっきり☆
open sourceへの貢献の第1歩、ちょっとまとめまスタ。
- オブジェクトは、クラスのインスタンスである。
- クラスメソッドとインスタンス(オブジェクト)メソッドと分けて呼ばれるが実際はメソッドでしかない
※第1引数がクラス名ならクラスメソッドになるし、リファレンスならインスタンスメソッドになる。 - コンストラクタメソッドは、通常クラスメソッド( Foo->new() )であるが、インスタンスメソッド($bar->new())であってもよい。
- オブジェクトとはクラス名が貼り付け(bless)られたリファレントである
- クラスは単なるパッケージ(名前空間)に過ぎない!!
- コンストラクタメソッドの好例
sub new{
my $invocant = shift;
my $class = ref($invocant) || $invocant;
my $self = {
color => "bay",
legs => "4",
@_,
};
bless($self , $class);
return $self;
}
とすることで、前の属性をオーバーライドできる
- use base qw(Foo Bar );で基底クラスを読み込む。
use filedsも自動的に一体化されるとのこと(ココもっとベンキョウ!)。BEGINで実行されるので、基底クラスにBEGIN内で初期化等があっても大丈夫★ - メソッドサーチの順番は
1.class::method
2."$_"::method foreach (@class::ISA)
3.UNIVERSAL::method
4.class::AUTOLOAD(サブルーチン)
5."$_"::AUTOLOAD foreach (@class::ISA)
6.UNIVERSAL::AUTOLOAD
- SUPER::method は現在実行中のパッケージの親クラスを探る
- クラスはパッケージだ!!
package Hird:
use Dragonfly;
{
package Dragonfly;
sub divebomb { shift->SUPER::divebomb(@_)}
}
こう書くだけで、Dragonflyクラスのメソッドが実装されることになる。まさに、クラス is パッケージ , that is 名前空間!
- INVOCANT->can(METHOD) 戻り値はなんと呼び出されるはずのサブルーチンへのリファレンス。
search+getで実行メソッドの実体が得られます。