我对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
子程序的情况下这样做,但我不确定如何实现它。
答案 0 :(得分:0)
我通过添加新属性找到了一个很好的解决方案:
has 'file_class' => (is => 'ro', isa => 'ClassName', default => 'File');
现在我设置files
属性的代码是:
map { $files{$_} = $self->file_class->new ( path => $path . '/' . $_ ) } @file_names;