我遇到了问题,那就是我想使用$ self变量初始化两个对象。第一个对象将被初始化,但第二个对象将不会被初始化。这是一些代码:
###Class main
use bar;
use arg;
sub new{
my $class = shift;
my $args = shift;
my $self = {};
$self->{'foo'} = $class->SUPER->new($args);
$self->{'bar'} = bar->new();
bless($self, $class);
return $self;
}
sub getFoo{
my $self = shift;
return $self->{'foo'};
}
sub getBar{
my $self = shift;
return $self->{'bar'};
}
对于函数getFoo,它返回一个值但是对于getBar,返回的值是undef,为什么会发生这种情况?感谢
EDIT1 是的,arg是类的父级,foo是一个我想使用某些方法的类。
####class bar
package bar;
sub new{
my $class = shift;
my $self = {
_bar1 => shift // 0,
_bar2 => shift //0,
};
bless($self,$class);
return $self;
}
sub getBar1{
my $self = shift;
return $self->{_bar1};
}
但是,如果我现在在班级主要
中这样做 $self->{__bar}->getBar1;
返回的消息是:无法在未定义的值上调用方法“getBar1”。
答案 0 :(得分:4)
将对象放在
中$self->{bar}
然后你打电话
$self->{__bar}->getBar1
将其更改为
$self->{bar}->getBar1
您似乎还有其他一些问题。根据您对代码的描述,Unnamed.pm
应包含以下内容:(不要使用main
;已经使用过了。)
package Unnamed;
use strict;
use warnings qw( all );
use foo qw( );
use bar qw( );
use parent 'arg';
sub new {
my $class = shift;
my $args = shift;
my $self = $class->SUPER::new($args);
$self->{foo} = foo->new();
$self->{bar} = bar->new();
return $self;
}
sub get_foo {
my $self = shift;
return $self->{foo};
}
sub get_bar {
my $self = shift;
return $self->{bar};
}
1;
然后,你可以做
my $o = Unnamed->new();
$o->get_bar->bar_method();