perl – 从’use fields’pragma获取字段列表?
发布时间:2020-12-15 22:06:16 所属栏目:大数据 来源:网络整理
导读:所以我熟悉Perl中的 fields pragma,它可以用来限制存储在类中的字段: package Fruit;use fields qw( color shape taste );sub new { my ( $class,$params ) = @_; my $self = fields::new( $class ) unless ref $class; foreach my $name ( keys %$params )
所以我熟悉Perl中的
fields pragma,它可以用来限制存储在类中的字段:
package Fruit; use fields qw( color shape taste ); sub new { my ( $class,$params ) = @_; my $self = fields::new( $class ) unless ref $class; foreach my $name ( keys %$params ) { $self->{ $name } = $params->{ $name }; } return $self; } 一旦我在顶部声明了字段,我怎么能回到列表,说因为我想动态生成访问器?键%FIELDS是唯一的方法吗? 其次,是否有一种更有效的方法来预先填充构造函数中的字段,而不是像上面那样循环并分配每个参数? 解决方法
如果您正在使用Perl 5.10及更高版本(实际上是5.9及更高版本,但我不计算开发版本),则字段会创建受限制的哈希.有关限制哈希的信息,请参阅
Hash::Util.
要使所有字段都可用于受限制的哈希,请使用legal_keys或legal_ref_keys函数: use Hash::Util qw( legal_ref_keys ); my $froot = Fruit->new(); my @attribs = legal_ref_keys($froot); 您可以执行许多操作来自动生成方法: >在构造期间创建一个临时对象并查询合法密钥,以便您可以创建属性— UGLY 选项4: package Fruit; use strict; use warnings; my @ATTRIBUTES; BEGIN { @ATTRIBUTES = qw( color shape taste ); } use fields @ATTRIBUTES; for my $attrib ( @ATTRIBUTES ) { my $getset = sub { my $self = shift; if( @_ ) { $self->{$attrib} = shift; } return $self->{$attrib}; }; { no strict 'refs'; *{$attrib} = $getset; } } sub new { my ( $class,$params ) = @_; my $self = fields::new( $class ) unless ref $class; foreach my $name ( keys %$params ) { $self->{ $name } = $params->{ $name }; } return $self; } 选项5. package Fruit; use Moose; has 'color' => ( is => 'rw',isa => 'Str',); has 'shape' => ( is => 'rw',); has 'taste' => ( is => 'rw',); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |