Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Hаследование?   Mikhail Polykovsky   13 Nov 2003 18:22:13 
 Re: Hаследование?   Artem Chuprina   13 Nov 2003 18:41:20 
 Re[2]: Hаследование?   Mikhail Polykovsky   13 Nov 2003 19:26:28 
 Re[2]: Hаследование?   Andrew Alakozow   13 Nov 2003 20:50:54 
 Re: Re[2]: Hаследование?   Artem Chuprina   14 Nov 2003 14:58:55 
 Re[4]: Hаследование?   Mikhail Polykovsky   14 Nov 2003 16:31:57 
 Re: Hаследование?   Sergey Skvortsov   13 Nov 2003 20:03:18 
 Re[2]: Hаследование?   Mikhail Polykovsky   13 Nov 2003 20:28:32 
 Re: Re[2]: Hаследование?   Sergey Skvortsov   13 Nov 2003 20:56:34 
 Re[4]: Hаследование?   Mikhail Polykovsky   13 Nov 2003 22:05:19 
 Re: Re[4]: Hаследование?   Sergey Skvortsov   13 Nov 2003 23:27:55 
 Re: Hаследование?   Alexey Mahotkin   13 Nov 2003 23:43:28 
 Re: Hаследование?   Sergey Skvortsov   14 Nov 2003 16:54:12 
 Re[2]: Hаследование?   Andrew Alakozow   13 Nov 2003 21:00:52 
 Hаследование?   Andrew Alakozow   13 Nov 2003 21:08:26 
 Re: Hаследование?   Sergey Skvortsov   14 Nov 2003 16:58:33 
 Hаследование?   Andrew Alakozow   14 Nov 2003 18:32:34 
Архивное /ru.perl/648816fc0597.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional