Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Массив в классе


Автор: alexey9 18.3.2007, 20:20
Добрый вечер.
Подскажите пожалуйста, никак не могу въехать как в классе объявить массив, пример:

Код

sub new {                                                                                                               
    my $check = shift;                                                                                                  
    my $class = ref($check) || $check;                                                                                  
    my $self = { };                                                                                                     
                                                                                                                        
    $self->{__myname} = "SomeName";                                                                              
    $self->{__objPtr} = shift;                                 
                                                                                                                        
    $self->{someVariable} = 0;

// вот тут нужно объявть массив что бы потом из методов к нему обращаться например как
// push $self->{array}, "SomeData";
//          ^^^^^^^^^ - образно
                                                                                                                       
    bless ($self, $class);                                                                                              
    return $self;                                                                                                       
}

Заранее спасибо.

Автор: nitr 18.3.2007, 21:21
alexey9, надо так и работать, так сказать с ссылкой на массив, т.е. объяви
$self->{__array} = [тут значения по дефолту если надо];

ну а где-то в теле модуля:
push @{$self->{__array}}, $value;

короче работа с ссылкой на массив...

Автор: alexey9 18.3.2007, 21:43
Цитата(nitr @ 18.3.2007,  21:21)
короче работа с ссылкой на массив...

Спасибо, то что надо! 

Автор: tishaishii 24.3.2007, 20:43
Цитата
вот тут нужно объявть массив что бы потом из методов к нему обращаться например как

Наверное, ты хотел Tie::Array?

Автор: alexey9 24.3.2007, 20:49
Да не, работа с ссылкой вполне устраивает. Спасибо.

Автор: Zuzu 27.3.2007, 13:22
Можно и так, с помощью "полноправных" методов. 

Вот обрезанный "кусок" из двух классов - "движка" для выбора картинок и "посредника", который собирает информацию для вывода на страницу

Код


package TumbnailsByKeywordId;     
# "движок" для выбора списка картинок по (одному) ключевому слову

...
sub images {
#
# ссылка на массив информации по картинкам
# (в формате шаблона HTML::Template)
#
# @IMAGES
#  ID     - ID картинки
#  WIDTH  - ширина
#  HEIGHT - высота
# ...
#
my $self = shift;
$self->{'IMAGES'} = [] unless(defined $self->{'IMAGES'});
if (@_) {
  $self->{'IMAGES'} = \@_;
}
return $self->{'IMAGES'};
}

sub select {
#
my $self  = shift;

my ($data, @images); # ... выбирает, в частности, картинки
...
while ($data = $sth->fetchrow_hashref ) {    # данные из запроса к БД
  ...здесь была их предварительная обратотка...
  #
  push @images, $data;
}
$self->images(@images);
...
}



Код

...
Где-то в другом классе-посреднике по подготовки данных для страницы...
...
my $aTumbnails = new TumbnailsByKeywordId ($self);
#
# подготовка параметров 
$aTumbnails->keywordId($keywordId);
...
$aTumbnails->select;    # выбор
#
# передача шаблону
$self->addToTemplateData(
  'KWD_IMAGES'           => $aTumbnails->images,      # картинки
   ...
);
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)