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

Mar*_*her 2 perl attributes moose

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

ike*_*ami 8

如果初始化确实是相互依赖的,那么就会出现问题,因为其中一个属性必须先于另一个属性进行初始化.但是你的描述没有任何支持.这听起来像创建记录器需要配置文件,就是这样.

只是创造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 )],
);
Run Code Online (Sandbox Code Playgroud)

样品用法

my $o = Class->new( config => "..." );
$o->warn("...");
Run Code Online (Sandbox Code Playgroud)

要么

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