[SP-pm] Closures

Thiago thiagoglauco at ticursos.net
Fri Jun 3 03:34:18 PDT 2011


Pegando o exemplo do próprio intermediated Perl:

use File::Find;

my $callback;
{
   my $count = 0;
   $callback = sub { print ++$count, ": $File::Find::name\n" };
}
find($callback, ".");

Aqui, a variável $callback está no escopo de Main. Mas ela é usada 
dentro de um bloco para referenciar uma sub. Se $callback não criasse a 
referência para a sub a variável count desapareceria com o fechamento do 
bloco. Você não pode acessar $count diretamente mas toda vez que 
executar a sub em $callback $count será incrementada.
Para que serve? Eh muito util para criar dados privados em objetos.

mais sobre closures:
http://www.manning-source.com/books/conway/conway_ch11.pdf


On 03-06-2011 00:22, "Flávio R. Lopes" wrote:
> Pessoal, desculpe aí, mas acho que achei a resposta nas Threads de 
> 2007 da lista. Foi inclusive uma thread do Solli.
> Mas se alguém quiser dar algum exemplo, please feel free....
>
> On 03-06-2011 00:12, "Flávio R. Lopes" wrote:
>> Boa noite pessoal!
>> Seguinte:
>> Estou vendo no meu livro, dentro da parte que trata de Subrotinas 
>> Anônimas, sobre Closures.
>> Não sei se entendi direito, em Perl, o significa disto.
>> Pelo que li, parece que é o acesso à uma variável, que está fora do 
>> escopo (por exemplo dentro de um bloco), por uma sub que está fora do 
>> escopo deste bloco de instruções, ou seja, a sub consegue recuperar o 
>> valor desta variável que está dentro de um bloco, ou seja, uma 
>> variável interna de um bloco que teoricamente não poderia ser acessada.
>>
>> É isto mesmo?
>> Se não for, alguém poderia de explicar?
>>
>> Abraço,
>> Flávio
>> =begin disclaimer
>>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>
> =begin disclaimer
>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer


-- 
_____________________________________________________________
Thiago Glauco Sanchez
ITIL
CIW Perl Specialist
Linux+
Téc. Eletrônica, Telecomunicações e Automação Industrial
Tecnologo em Gestão de Tecnologia da Informação
_____________________________________________________________



More information about the SaoPaulo-pm mailing list