|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/4581e7539550.html, оценка из 5, голосов 22
|