"b"); sub new { my ($package, $config) =-6ren">
gpt4 book ai didi

perl - 是否有任何 Perl 模块可以从默认配置和可选配置的 hashref 中设置对象?

转载 作者:行者123 更新时间:2023-12-04 13:15:10 24 4
gpt4 key购买 nike

我发现自己反复编写和重写以下类型的代码:

 my %default = (x => "a", y => "b");
sub new
{
my ($package, $config) = @_;
my $self = {%default};
for my $k (keys %default) {
$self->{$k} = $config->{$k} if defined $config->{$k};
}
for my $k (keys %$config) {
if (! exists $default{$k}) {
carp "Unknown config option $k\n";
}
}
bless $self;
# etc. etc.
}

在我制作自己的模块来执行此操作之前,我只是想知道 CPAN 上是否已经有类似的东西?我只想要这个非常简单的上述功能,所以建议使用 Moose 不是这个问题的合适答案。

最佳答案

Moose支持属性的默认值,例如:

has 'foo' => ( is => 'rw', isa => 'Int', default => 42 );

但是,如果您不想走 Moose 路线,实现您想要的更简单的方法是:
sub new { 
my ( $package, %config ) = @_;

my %defaults = ( x => 'a', y => 'b' );

my $self = { %defaults, %config };

# error checking here

return bless $self, $package;
}

由于在哈希初始化中两次指定相同的哈希键将破坏第一个,因此 %config 中的任何键将简单地覆盖 %defaults 中的那些.

关于perl - 是否有任何 Perl 模块可以从默认配置和可选配置的 hashref 中设置对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3199955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com