|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 13 Nov 2003 18:41:20 To : Mikhail Polykovsky Subject : Re: Hаследование? -------------------------------------------------------------------------------- Хмутро. MP> Здравствуйте. Что-то не могу сообразить. MP> У меня есть несколько модулей, в которых есть одинаковые функции MP> (например, сохранение сообщения об ошибке, как в DBI). Писать их в MP> каждом модуле не хочется. Объявить в базовом классе - не получилось, MP> потому что обращаться к ним надо из модуля, а не из скрипта, MP> вызывающего модуль. Писать везде SUPER тоже неудобно, уровень MP> вложенности заранее неизвестен. Что посоветуете? MP> Hеработающий вариант: MP> ============================================================================ MP> ============ { package Base; use strict; my $errstr; sub errstr{ MP> return $_[0]? $_[0]->{'_errstr'} : $errstr; } MP> sub set_err{ MP> my ($self, $msg, $state, $result) = @_; MP> if( $self ){ MP> $self->{'_errstr'} = $msg; MP> }else{ MP> $errstr = $msg; MP> } MP> return $result; # usually undef; MP> } MP> } MP> ############################################################################ MP> #### MP> { MP> package Child; MP> use strict; MP> use base qw(Base); MP> sub new { MP> my ($this, $strategy) = @_; MP> return set_err(undef, 'Hе указан код стратегии') return $this->set_err('Hе указан код стратегии') MP> unless $strategy; MP> my $self = {}; MP> bless $self; MP> return $self; MP> } MP> } MP> my $c = new Child; -- Artem Chuprina RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5.1 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/11477f86d428e.html, оценка из 5, голосов 10
|