|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Sergey Skvortsov 2:5020/400 13 Nov 2003 20:03:18 To : Mikhail Polykovsky Subject : Re: Hаследование? -------------------------------------------------------------------------------- Mikhail Polykovsky пишет: MP> Здравствуйте. Что-то не могу сообразить. MP> У меня есть несколько модулей, в которых есть одинаковые функции MP> (например, сохранение сообщения об ошибке, как в DBI). Писать их в MP> каждом модуле не хочется. Объявить в базовом классе - не получилось, MP> потому что обращаться к ним надо из модуля, а не из скрипта, MP> вызывающего модуль. Писать везде SUPER тоже неудобно, уровень MP> Что посоветуете? то что ты хочешь - странно и противоестественно, но вот solution через closures: package Mixin; use strict; sub import { shift; my $package=caller(); my $errstr; my $errstr=sub { return $_[0]? $_[0]->{'_errstr'} : $errstr; }; my $set_err=sub { my ($self, $msg, $state, $result) = @_; if( $self ){ $self->{'_errstr'} = $msg; }else{ $errstr = $msg; } print $msg; # !!! TRACE return $result; # usually undef; }; no strict 'refs'; *{join('::', $package, 'set_err')} = $set_err; *{join('::', $package, 'errstr')} = $errstr; } package Child; use strict; use Mixin; sub new { my ($this, $strategy) = @_; return set_err(undef, 'Hе указан код стратегии') unless $strategy; my $self = {}; bless $self; return $self; } package main; use strict; use Child; my $c = Child->new(); MP> З.Ы. Кстати, чем отличается use base от @ISA. Документация MP> высказывается в смысле "что понравится, то и бери"... Hа любителя. Относительный плюс 'use base' - не надо объявлять @ISA через 'use vars' в per. 5.00503. -- Sergey Skvortsov mailto: skv@protey.ru ############################################################################## ## ############################################################################## ## Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5.1 * Origin: Talk.ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/648816fc0597.html, оценка из 5, голосов 10
|