Yanor.net/
Wiki
Blog
GitHub
Sandbox
開始行:
* blessを使ったオブジェクト指向 - 詳細 [#r80cb373]
- ↓を見る。
- http://blog.livedoor.jp/dankogai/archives/50816007.html
- ↓要するにこんな感じで書くといいそうだ。
*** 親クラス [#r8ec3a23]
package MyClass;
sub new {
my $thing = shift;
my $class = ref $thing || $thing;
my $self = bless {@_} , $class;
$self->init() if $self->can('init');
$self;
}
our %default = ( name => 'anonymous' );
sub init {
my $self = shift;
$self->{$_} = $default{$_} for keys %default;
$self;
}
sub name {
my $self = shift;
$self->{name} = shift if @_;
return $self->{name};
}
- new がコンストラクタ。
- "my $class = ref $thing || $thing" は Class->new ではな...
- can()はUNIVERSAL メソッド。メソッドが存在するか調べる。...
- name()はアクセサ。
*** 子クラス [#x675d4a7]
package MyClass::Sub;
our @ISA = qw/MyClass/;
our %default = ( 'name' => 'taro' );
sub init {
my $self = shift;
$self->SUPER::init();
$self->{$_} = $default{$_} for keys %default;
}
- new()は@ISAで親クラスを継承して使っている。
- init()では $self->SUPER::init() で親クラスのinit()を呼...
*** クラスを利用 [#sf26e1c9]
#!/usr/local/bin/perl
my $obj = MyClass::Sub->new( name => 'jiro' );
print $obj->name, "\n";
$obj->name('saburo');
print $obj->name, "\n";
終了行:
* blessを使ったオブジェクト指向 - 詳細 [#r80cb373]
- ↓を見る。
- http://blog.livedoor.jp/dankogai/archives/50816007.html
- ↓要するにこんな感じで書くといいそうだ。
*** 親クラス [#r8ec3a23]
package MyClass;
sub new {
my $thing = shift;
my $class = ref $thing || $thing;
my $self = bless {@_} , $class;
$self->init() if $self->can('init');
$self;
}
our %default = ( name => 'anonymous' );
sub init {
my $self = shift;
$self->{$_} = $default{$_} for keys %default;
$self;
}
sub name {
my $self = shift;
$self->{name} = shift if @_;
return $self->{name};
}
- new がコンストラクタ。
- "my $class = ref $thing || $thing" は Class->new ではな...
- can()はUNIVERSAL メソッド。メソッドが存在するか調べる。...
- name()はアクセサ。
*** 子クラス [#x675d4a7]
package MyClass::Sub;
our @ISA = qw/MyClass/;
our %default = ( 'name' => 'taro' );
sub init {
my $self = shift;
$self->SUPER::init();
$self->{$_} = $default{$_} for keys %default;
}
- new()は@ISAで親クラスを継承して使っている。
- init()では $self->SUPER::init() で親クラスのinit()を呼...
*** クラスを利用 [#sf26e1c9]
#!/usr/local/bin/perl
my $obj = MyClass::Sub->new( name => 'jiro' );
print $obj->name, "\n";
$obj->name('saburo');
print $obj->name, "\n";
ページ名: