您好基本上是perl中的OO编程问题.我希望有两个对象A和B,A包含一个类型为B的成员变量.我做了一些测试,但似乎不起作用.任何的想法?
package a;
sub new{
my $self = {};
my $b = shift;
$self->{B} = $b;
bless $self;
return $self;
}
sub doa{
my $self = shift;
print "a\n";
$self->{B}->dob;
}
1;
Run Code Online (Sandbox Code Playgroud)
package b;
sub new {
my $self = {};
bless $self;
return $self;
}
sub dob{
my $self = shift;
print "b\n";
}
1;
Run Code Online (Sandbox Code Playgroud)
use a;
use b;
my $b = b->new;
my $a = a->new($b);
$a->doa;
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它显示:
a
Can't locate object method "dob" via package "a" at a.pm line 16.
Run Code Online (Sandbox Code Playgroud)
你忘记了方法的第一个参数.方法的第一个参数始终是调用者.
sub new {
my ($class, $b) = @_;
my $self = {};
$self->{B} = $b;
return bless($self, $class);
}
Run Code Online (Sandbox Code Playgroud)
不过,我通常是bless第一个
sub new {
my ($class, ...) = @_;
my $self = bless({}, $class);
$self->{attribute} = ...;
return $self;
}
Run Code Online (Sandbox Code Playgroud)
因为它与派生类的构造函数更一致.
sub new {
my ($class, ...) = @_;
my $self = $class->SUPER::new(...);
$self->{attribute} = ...;
return $self;
}
Run Code Online (Sandbox Code Playgroud)