[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: еще вопросик по perl



> 
>  DEO> ну да, почитал я главу про замыкания (closure) у Л.Уолла
>  DEO> и откровенно говоря не понял смысла введения нового термина
> 
> sub seqgenerator_generator {
>   my $seed = 0;
>   return sub { return $seed += 1 };
> }
> 
> my $x = seqgenerator_generator(0);
> print &$x, &$x, &$x, "\n";
> my $y = seqgenerator_generator(0);
> print &$y, &$y, &$y, "\n";
> print &$x, &$x, &$x, "\n";
> 
> Когда поймешь, как это работает - можно будет продолжить разговор.
[off] можно несколько в другом тоне? [/off]


дык вроде ясно, каждый вызов возвращает ссылку на ф-цию связанную с
конкретным экземпляром $seed, ну и так как ссылка на $seed существует и
после того как из seqgenerator_generator возвращено управление, то $seed
сборщиком мусора не удаляется (насколько я понимаю)
и выведет сия программа текст вроде:
123 (первый экземпляр)
123 (второй экземпляр)
456 (продолжаем первый экземпляр)

собственно клозура по определению в книжке - это ссылка на объект
находящийся в другом блоке
ну и в чем такая особенность данной ссылки что надо было определить
отдельный термин для сего до меня пока не дошло, извините

насколько я понимаю отдельный термин вводят когда предполагают
специфические действия с сущностью не присущие другим сущностям
но тут вроде блоки и ссылки вышеописанные действия перекрывают?



Reply to: