我正在学习perl并查看一些旧的OOP代码。 在pl中,有一行调用pm文件中的函数。 喜欢
my $id = new ABC::Data::InstallData();
my $startMenu = $id->getData('menu');
在pm文件中,功能如下:
package ABC::Data::InstallData;
$debug = 1;
sub getData {
my($self, $tag) = @_;
#print "----1------$self-----------\n";
#print "----2------$tag-----------\n";
if ( $debug && ! defined $self->{$tag} ) {
$logger->debug("Undefined variable $tag = $self->{$tag}");
}
if ( $debug ) {
$logger->debug("Exiting ABC::Data::InstallData::getData");
}
return $self->{$tag};
}
如您所见,有2行打印可以输出类名和参数inputed。
但我不明白$self->{$tag}
的含义,有人可以帮忙吗?
答案 0 :(得分:0)
$self->{tag}
...在这种情况下是一个类属性。这似乎是一个类中的setter / getter方法。以下是此操作的一个示例(详细):
sub new {
my ($class, $arg) = @_;
my $self = bless {}, $class;
$self->arg($arg);
return $self;
}
sub arg {
my ($self, $arg) = @_;
if (defined $arg){
$self->{arg} = $arg;
}
return $self->{arg};
}
然后,当我使用该模块时:
my $object = Blah->new(2);
print $object->arg;
# you can even access object attributes outside of the
# documented accessor methods, but it breaks encapsulation,
# so you just don't do it
print $object->{arg};
输出:
2
本质上,子例程getData()
返回$self->{tag}
的值,其中$self
是类的对象(并且是哈希引用),tag
是该对象的属性(填充到祝福的哈希引用$self
(对象))。当您使用参数调用它时,设置$self->{tag}
,然后返回,并在没有参数的情况下调用,不会完成属性设置,并返回先前的(当前)值。