Наследование Perl - PullRequest
       1

Наследование Perl

1 голос
/ 10 января 2012

В Perl, учитывая имя пакета "My :: Package" в скаляре $ myScalar, что лучше всего определять, есть ли у My :: Package родительский объект с именем "My :: Package :: Parent"?Ограничения заключаются в том, что My :: Package, возможно, еще не загружен, и что мы не знаем обязательных параметров для конструктора класса.

Спасибо

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Я ожидаю, что вы захотите isa(), или, может быть, прямо исследуете @ISA, но проверьте DOES() и can() в man perlobj.

1 голос
/ 10 января 2012

Ну, вы не можете знать, что класс имеет для parent, пока класс не существует, поэтому вам нужно загрузить модуль, который его определяет.Затем вы можете использовать метод UNIVERSAL isa, чтобы определить, наследуется ли он от My::Package::Parent.

my $class = 'My::Package';

my $file = $class;   # Or:
$file =~ s{::}{/}g;  #   eval "require $class;" or die $@;
$file .= '.pm';      #
require $file;       #

if ($class->isa('My::Package::Parent')) {
   ...
}

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...