perl – 在“use fields”private中,实例变量在什么情况下声明为
发布时间:2020-12-16 06:24:10  所属栏目:大数据  来源:网络整理 
            导读:我试图理解字段pragma的行为,我找到 poorly documented,关于以下划线为前缀的字段.这就是文档中有关它的内容: Field names that start with an underscore character are made private to the class and are not visible to subclasses. Inherited fields c
                
                
                
            | 
 我试图理解字段pragma的行为,我找到 
 poorly documented,关于以下划线为前缀的字段.这就是文档中有关它的内容: 
  
  
  
 根据我的测试,这与其实际行为不一致.不仅_-前缀字段在子类中可见,它们在外部类中也是可见的(除非我没有得到“可见”的含义).此外,直接访问受限制的哈希工作正常. 在哪里可以找到更多关于字段pragma的行为,而不是源代码? {
    package Foo;
    use strict;
    use warnings;
    use fields qw/a _b __c/;
    sub new {
        my ( $class ) = @_;
        my Foo $self = fields::new($class);
        $self->a = 1; $self->b = 2; $self->c = 3;
        return $self;
    }
    sub a : lvalue { shift->{a}   }
    sub b : lvalue { shift->{_b}  }
    sub c : lvalue { shift->{__c} }
}
{
    package Bar;
    use base 'Foo';
    use strict;
    use warnings;
    use Data::Dumper;
    my $o = Bar->new;
    print Dumper $o; ##$VAR1 = bless({'_b' => 2,'__c' => 3,'a' => 1},'Foo');
    $o->a = 4; $o->b = 5; $o->c = 6;
    print Dumper $o; ##$VAR1 = bless({'_b' => 5,'__c' => 6,'a' => 4},'Foo');
    $o->{a} = 7; $o->{_b} = 8; $o->{__c} = 9;
    print Dumper $o; ##$VAR1 = bless({'_b' => 8,'__c' => 9,'a' => 7},'Foo');
}解决方法
 巧合的是,我碰巧在?/ codescraps / fields / test.pl中有一个测试脚本,可以追溯到两年前,当时我尝试回答同样的问题.                         (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
