具有多个相互依赖属性的 Perl Moose

标签 perl attributes moose

如何创建我的 Perl Moose 类,以便以正确的顺序构建多个相互依赖的属性?在我的例子中,我想从我的主配置文件中指定的配置文件配置我的 Log::Log4perl 对象。

最佳答案

如果初始化确实是相互依赖的,那么你就有问题了,因为其中一个属性必须先于另一个属性初始化。但是您的描述中没有任何内容支持这一点。听起来创建记录器需要配置文件,仅此而已。

只是让 logger 的创建变得懒惰,让 config 有机会被设置。

package Class;

use Moose;

has config => ( ... );

has logger => (
    isa     => 'Str',
    is      => 'ro',
    lazy    => 1,
    default => sub {
        my $self = shift;
        my $config = $self->config
            or die(...);

        return Log::Log4perl->get_logger( $config->{logger} );
    },
    handles => [qw( info warn error fatal )],
);

示例用法

my $o = Class->new( config => "..." );
$o->warn("...");

# Assuming config isn't required=>1.
my $o = Class->new();
$o->config("...");
$o->warn("...");

关于具有多个相互依赖属性的 Perl Moose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50118577/

相关文章:

regex - 插入正则表达式以格式化日期(Perl)

perl - perl 中未提供文件名时如何使用 __DATA__ 句柄

Magento 属性值 - 添加描述字段

perl - 如何设置 AoArrayrefs 属性并从标量强制转换为 arrayref?

perl - 使用 CPAN 安装 Perl 模块时找不到 dmake

perl - 如何在 Perl 中使用模块

mysql - "is_visible"Woocommerce 产品属性的标志位置

ruby-on-rails - pluck()/select() 的 Rails 逆

perl - 如何防止无限递归(使用 Moose)?

perl - 如何在 Moose 中使用单个构建器构建多个属性?