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中有一个测试脚本,可以追溯到两年前,当时我尝试回答同样的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |