Dúvida quando ao uso de métodos anônimos

Delphi

05/08/2013

Pessoal como estão?

Estou tentando utilizar métodos anônimos, vejam o exemplo abaixo.

procedure TForm1.Button1Click(Sender: TObject);

var
  i:integer;

begin

  i:= function (): Integer
      begin
        Result:= 1;
      end;

end;

end.


Ao tentar compilar esse código ocorre o seguinte erro: [dcc32 Error] AppInit.pas(36): E2010 Incompatible types: 'Integer' and 'Procedure'

Alguém sabe me informar se é possível capturar um valor de uma função usando métodos anônimos de forma semelhante ao que estou tentando fazer.

Desde já agradeço a atenção.
Johni Marangon

Johni Marangon

Curtidas 0

Respostas

Alex Constâncio

Alex Constâncio

05/08/2013

Olá Johni

A atribuição de um método anônimo somente pode ser feita para uma variável ou parâmetro com tipagem própria para este fim. No caso do teu exemplo, o código teria que sofrer uma pequena modificação:

type
  TMeuAnonimo = reference to function: Integer;

procedure TForm1.Button1Click(Sender: TObject);
 
var
  anonimo: TMeuAnonimo;
  i: Integer;
begin
  anonimo := function: Integer
             begin
               Result := 1;
             end;
  i := anonimo;
end;


Como você pode ver, o código anônimo foi "atribuído" (na verdade, é uma referência para este código que é atribuída) à variável anonimo que depois pôde ser utilizada como um método qualquer. Na verdade, trata-se de uma variação do tipo procedural, que já existia no Delphi e era usado para a implementação de eventos.

O que a linguagem tem agora é uma sintaxe que permite que esse tipo de construção apareça no meio do código.

Internamente, os métodos anônimos são implementados por meio de interfaces.

Alex
GOSTEI 0
Johni Marangon

Johni Marangon

05/08/2013

Olá Alex.

Muito obrigado pela sua resposta.

Abraço.
GOSTEI 0
Deivison Melo

Deivison Melo

05/08/2013

Estou encerrando o post como solucionado!

Abração a todos e bons códigos!!!
GOSTEI 0
POSTAR