Я довольно новичок в программировании Moose и OO. Ищете какое-то руководство. У меня есть следующий Dir
Муз класс, который строит список объектов File
:Расширение класса Moose для внутреннего использования
#!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
подпрограммы, но я не уверен, как для реализации этого.
Не используйте 'map' в пустом контексте , Это просто цикл 'for'. – melpomene
Откуда берутся '$ path' и' @ file_names'? – melpomene
'$ path' - это аргумент, переданный конструктору. '@ file_names' - это всего лишь массив имен файлов внутри каталога. Я удалил весь код, не относящийся к вопросу. – StevieD