Aprendendo sobre lambdas e eu encontrei isso "...o tempo de vida de uma variável local é limitado pela função na qual a variável é declarada. Mas se for capturado pelo lambda, o código que usa essa variável pode ser armazenado e executado mais tarde." O texto não oferece nenhum exemplo de código desse processo. Existe um exemplo de código que faz o que está sendo reivindicado?
Normalmente, as variáveis locais deixam de existir quando a função que as declarou retorna.
Vamos capturar
x
em um lambda:x
O tempo de vida de foi estendido para ser tão longo quanto o lambda. Para mostrar isso, fizsomeFunction
return o lambda para que ele possa ser usado mesmo apóssomeFunction
retornos. Vamos chamar o lambda algumas vezes emmain
.Claramente,
f
ainda está imprimindo o valor dex
e incrementando-o, mesmo depois desomeFunction
ter retornado. Isso mostra quex
ainda existe depois desomeFunction
ter retornado.A ideia é que, uma vez que uma variável é capturada em um lambda, esse lambda pode ser passado para outras coisas, e pode ser chamado muito depois que a função original que declarou a variável retornou. O tempo de vida da variável deve ser estendido, ou então quem sabe o que acontecerá quando esses lambdas forem chamados?