Cra*_*lus 7 oop perl perl-module activestate
我正在研究Perl OO(Perl的新手).我创建了一个简单的示例层次结构:
父类:
#!usr/bin/perl
use strict;
use warnings;
package Objs::Employee;
my $started;
sub new {
my ($class) = @_;
my $cur_time = localtime;
my $self = {
started => $cur_time,
};
print "Time: $cur_time \n";
bless $self;
}
sub get_started {
my ($class) = @_;
return $class->{started};
}
sub set_started {
my ($class, $value) = @_;
$class->{started} = $value;
}
1;
Run Code Online (Sandbox Code Playgroud)
儿童班:
#!/usr/bin/perl
package Objs::Manager;
use strict;
use warnings;
use base qw (Objs::Employee);
my $full_name;
sub new {
my ($class, $name) = @_;
my $self = $class->SUPER::new();
$self->{full_name} = $name;
return $self;
}
1;
Run Code Online (Sandbox Code Playgroud)
我尝试按如下方式测试它:
#!/usr/bin/perl
use strict;
use warnings;
use Objs::Manager;
my $emp = Objs::Manager->new('John Smith');
use Data::Dumper;
print Dumper($emp);
Run Code Online (Sandbox Code Playgroud)
结果:
时间:2013年9月29日星期日12:56:29
$VAR1 = bless( {
'started' => 'Sun Sep 29 12:56:29 2013',
'full_name' => 'John Smith'
}, 'Objs::Employee' );
Run Code Online (Sandbox Code Playgroud)
问题:为什么转储中的对象报告的是Obj :: Employee而不是Obj :: Manager?
我打电话给经理.
Сух*_*й27 11
总是使用两个参数bless,作为$class告诉哪个包应该被祝福.如果$class省略,则使用当前包.
bless $self, $class;
Run Code Online (Sandbox Code Playgroud)
产量
$VAR1 = bless( {
'started' => 'Sun Sep 29 13:24:26 2013',
'full_name' => 'John Smith'
}, 'Objs::Manager' );
Run Code Online (Sandbox Code Playgroud)
来自perldoc -f bless:
如果派生类可能继承执行祝福的函数,则始终使用双参数版本
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |