扩展Moose类以允许在内部使用不同的类

时间:2017-02-04 14:23:33

标签: perl moose

我对Moose和OO编程很新。寻求一些指导。我有以下Dir Moose类,它构建了File个对象的列表:

#!usr/bin/perl
package Dir;
use Moose;
use Modern::Perl;

has 'files' =>            (is => 'rw', isa => 'HashRef[File]' ); 

<..>

sub BUILD {
  my $self = shift;

<..>

 map { $files{$_} = File->new ( path => $path . '/' . $_ ) } @file_names;
 $self->files ( \%files );

<..>
}

我正在尝试编写一个名为MyDir的新类extends上面的Dir类。但是,我想使用扩展File个对象的专用对象,而不是创建File类对象:

#!usr/bin/perl
package MyDir;
use Moose;
use Modern::Perl;

has 'type' =>  (is => 'ro', isa => 'Str', default => '');
has 'files' => (is => 'rw', isa => 'HashRef[MyFile]' );

我想Moose可能有办法在不重写BUILD子程序的情况下这样做,但我不确定如何实现它。

1 个答案:

答案 0 :(得分:0)

我通过添加新属性找到了一个很好的解决方案:

has 'file_class' => (is => 'ro', isa => 'ClassName', default => 'File');

现在我设置files属性的代码是:

map { $files{$_} = $self->file_class->new ( path => $path . '/' . $_ ) } @file_names;