gpt4 book ai didi

perl - Perl 运行时是否有实际的派生类?

转载 作者:行者123 更新时间:2023-12-04 10:52:25 27 4
gpt4 key购买 nike

我正在研究 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;

child 类:
#!/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;

我尝试按如下方式对其进行测试:
#!/usr/bin/perl  
use strict;
use warnings;


use Objs::Manager;

my $emp = Objs::Manager->new('John Smith');
use Data::Dumper;
print Dumper($emp);

结果:

时间:2013年9月29日星期日12:56:29
$VAR1 = bless( {
'started' => 'Sun Sep 29 12:56:29 2013',
'full_name' => 'John Smith'
}, 'Objs::Employee' );

问题:为什么转储中报告的对象是 Obj::Employee 而不是 Obj::Manager?
我调用经理的新人。

最佳答案

bless 总是使用两个参数, 如 $class告诉哪个包应该被祝福。如 $class省略,则使用当前包。

bless $self, $class; 

输出
$VAR1 = bless( {
'started' => 'Sun Sep 29 13:24:26 2013',
'full_name' => 'John Smith'
}, 'Objs::Manager' );

来自 perldoc -f bless :

Always use the two-argument version if a derived class might inherit the function doing the blessing

关于perl - Perl 运行时是否有实际的派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19077318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com