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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Alan Long                            2:5030/1082.72 17 Mar 2003  06:39:34
 To : All
 Subject : про рекурсию
 -------------------------------------------------------------------------------- 
 
 Hello All!
 
 Хотелось-бы узнать у общественности как правильнее сделать примерно такой код
 (это кусок класса ответственного за деревья):
 sub tree_list {
    my $this = shift;
    my $id = shift;
 
    sub _tree_list {
       my $this = shift;
       my $id =  shift;
       my $level = shift || 0;
       my @rc;
 
       ...
       push( @rc, $self->_tree_list( $this->node($id)->next, $level + 1 ) );
       # $this->node($id)->next - возвращает id, следующего узла
       ...
       return @rc;
    }
    return $this->_tree_list( $id );
 }
 Если данные которые находятся в объекте по-каким-либо причинам не корректные, то
 возможно зацикливание рекурсивной процедуры. Для этого мы вводим некий хеш для
 отлова обработки одинаковых id:
 sub tree_list {
    ...
    my %loop;
 
    sub _tree_list {
       ...
       my $id = shift;
       ...
       unless( defined $loop{$id} ) {
          $loop{$id} = 1;
          ....
       }
    }
    ...
 }
 
 Hо в этом случае perl ругается на то, что %loop не может быть расшарен в
 tree_list и _tree_list, сейчас я сделал так:
    our %loop = (); # вместо my %loop;
 
 Hасколько это правильное решение ?
 Или можно было-бы как-то более проще/правильнее сделать это ?
 -- 
 With best,
      Ъ-·    Ъ
      Е-ЧLaі\і <alan@x-rays.eu.org>
 
 --- timEd/386 1.10+
  * Origin: X - Rays Station (2:5030/1082.72)
 
 

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

 Тема:    Автор:    Дата:  
 про рекурсию   Alan Long   17 Mar 2003 06:39:34 
 Re: про рекурсию   Yury Kopyl   19 Mar 2003 14:47:48 
 Re: про рекурсию   Andrey Chernomyrdin   19 Mar 2003 17:06:55 
 Re: про рекурсию   Artem Chuprina   19 Mar 2003 15:43:43 
Архивное /ru.perl/4581e7539550.html, оценка 2 из 5, голосов 22
Яндекс.Метрика
Valid HTML 4.01 Transitional