大佬教程收集整理的这篇文章主要介绍了perl – 从’use 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是唯一的方法吗?
其次,是否有一种更有效的方法来预先填充构造函数中的字段,而不是像上面那样循环并分配每个参数?
要使所有字段都可用于受限制的哈希,请使用legal_keys或legal_ref_keys函数:
use Hash::Util qw( legal_ref_keys ); my $froot = Fruit->new(); my @attribs = legal_ref_keys($froot);
您可以执行许多操作来自动生成方法:
>在构造期间创建一个临时对象并查询合法密钥,以便您可以创建属性— UGLY
> AUTOLOAD属性通过查询对象以获取合法密钥列表. CODE SMELL ALERT:这假定所有子类将使用相同的底层数据结构.
>访问模块中的%FIELDS哈希,以便在编译时或通过AUTOLOAD生成方法.更多问题 – 假设未发布的一些字段pragma将保留.
>在编译时定义属性数组并自动生成方法并根据值设置字段.
>放弃编写所有这些样板并使用Moose.
选项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',);
以上是大佬教程为你收集整理的perl – 从’use fields’pragma获取字段列表?全部内容,希望文章能够帮你解决perl – 从’use fields’pragma获取字段列表?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。