无法在perl中返回object属性的默认值

mad*_*dia 0 oop perl

我有一个模块,当我试图在初始化中设置默认属性时,在调用子例程时给出以下错误 get_name

     Use of uninitialized value
Run Code Online (Sandbox Code Playgroud)

示例代码

     package test;
     #....
     #....
     sub new {
         my ($class) =  @_;
         my $self    = {};
         bless $self,$class;
         $self->_initialize();
         return $self;
     }

     sub _initailalize {
        my($self) = @_;
        $self = {
                     _name => 'NA'
        };
     }

     sub get_name {
              return $_[0]->{_name};
     }
Run Code Online (Sandbox Code Playgroud)

需要宝贵的投入.

sim*_*que 5

您正在本地范围内重新定义$ self _initialize并分配新的hashref.这样你就不会把_name钥匙添加到受祝福的物体上.完成后_initialize,您新分配的$self(使用简单的hashref)就消失了.因此在get_name它无法访问密钥_name.

 sub _initailalize { # btw typo here
    my ($self) = @_;
    $self->{_name} = 'NA';
 }
Run Code Online (Sandbox Code Playgroud)

如果你这样做,你需要在一行上分配每个成员.


作为一个建议,这种内置的OO风格非常繁琐.试着看看Moose或它的衍生物,因为它们非常强大.