在 Perl 中,如果我想在对象构造函数中使用命名参数,如果我希望进行一些验证,我的代码似乎有点笨拙。
sub new {
my $class = shift;
my $self = {};
my %args = @_;
foreach my $argname (keys %args) {
if ($argname eq 'FOO') { $self->{$argname} = $args{$argname}; }
elsif ($argname eq 'BAR') { $self->{$argname} = $args{$argname}; }
elsif ($argname eq 'BAZ') { $self->{$argname} = $args{$argname}; }
…
else { die "illegal argument $argname\n"; }
}
bless $self;
return $self;
}
首先,使用临时哈希 ( ) 似乎有点笨拙%args
。其次,整个if
链条看起来冗长乏味。
后者可以简化为
if ('-FOO-BAR-BAZ-'=~m/-$argname-/) { $self->{$argname} = $args{$argname} }
else { die "..."; }
但我想这可以改进。
如果我需要检查值,if … elsif
链是否仍然需要?
我搜索了一下,但找不到更好的成语。有没有(除了使用某种 Perl OO 框架)