2004年12月18日(土)の日記
Perlでオブジェクト指向
Perlでオブジェクト指向〜メモ〜
────────────────────
Perlで親クラスを指定しないクラスを宣言した場合は、それはUNIVERSALというクラスの子クラスとなる。
UNIVERSALにおいては、isa()という関数が定義されていて、CocoaのNSObjectでいう-(BOOL)isKindOfClass:(Class)aClassと同じ。
-(BOOL)isMemberOfClass:(Class)aClassは自分で実装する必要がある(?)。
─────
あるクラスのインスタンスにあるメソッドが送信されても、そのクラスにそのメソッドが定義されていないとき、
親クラスにメソッドを渡す前にそのインスタンスにAUTOLOADというメソッドがコールされる。
これによって簡易アクセッサメソッドを構築可能。
例:
これで例えば、$obj = OneClass->new(0, 1); $obj->key0;で、インスタンス変数key0を呼ぶことができる。
────────────────────
────────────────────
Perlで親クラスを指定しないクラスを宣言した場合は、それはUNIVERSALというクラスの子クラスとなる。
UNIVERSALにおいては、isa()という関数が定義されていて、CocoaのNSObjectでいう-(BOOL)isKindOfClass:(Class)aClassと同じ。
-(BOOL)isMemberOfClass:(Class)aClassは自分で実装する必要がある(?)。
─────
あるクラスのインスタンスにあるメソッドが送信されても、そのクラスにそのメソッドが定義されていないとき、
親クラスにメソッドを渡す前にそのインスタンスにAUTOLOADというメソッドがコールされる。
これによって簡易アクセッサメソッドを構築可能。
例:
package OneClass;
use strict;
sub new {
my $self = shift;
my $variable0 = shift;
my $variable1 = shift;
bless {'key0' => $variable0, 'key1' => $variable1}, $self;
}
sub AUTOLOAD {
my $self = shift;
my $method = $AUTOLOAD;
$method =~ s/.*://;
return if ($method eq 'DESTROY');
return $self->{$method};
}
1;
これで例えば、$obj = OneClass->new(0, 1); $obj->key0;で、インスタンス変数key0を呼ぶことができる。
────────────────────
この日記へのトラックバック
この日記へのトラックバックはありません。
この日記へのコメント