|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Mikhail Polykovsky 2:5020/400 13 Nov 2003 18:22:13 To : All Subject : Hаследование? --------------------------------------------------------------------------------
Здравствуйте. Что-то не могу сообразить.
У меня есть несколько модулей, в которых есть одинаковые функции
(например, сохранение сообщения об ошибке, как в DBI). Писать их в
каждом модуле не хочется. Объявить в базовом классе - не получилось,
потому что обращаться к ним надо из модуля, а не из скрипта,
вызывающего модуль. Писать везде SUPER тоже неудобно, уровень
вложенности заранее неизвестен. Что посоветуете?
Hеработающий вариант:
================================================================================
========
{
package Base;
use strict;
my $errstr;
sub errstr{
return $_[0]? $_[0]->{'_errstr'} : $errstr;
}
sub set_err{
my ($self, $msg, $state, $result) = @_;
if( $self ){
$self->{'_errstr'} = $msg;
}else{
$errstr = $msg;
}
return $result; # usually undef;
}
}
################################################################################
{
package Child;
use strict;
use base qw(Base);
sub new {
my ($this, $strategy) = @_;
return set_err(undef, 'Hе указан код стратегии')
unless $strategy;
my $self = {};
bless $self;
return $self;
}
}
my $c = new Child;
================================================================================
========
З.Ы. Кстати, чем отличается use base от @ISA. Документация
высказывается в смысле "что понравится, то и бери"...
--
Михаил Полыковский
http://copi.ru/27690/
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5.1
* Origin: UTC (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/9096575f6bfb.html, оценка из 5, голосов 10
|